ORACEL总结
1. 创建表空间
在ORACLE中表空间相当于SQL中的数据库,Oracle表空间是数据管理的基本方法,所有用户的对象要存放在表空间中。
实例: 1.首先,创建(新)用户:
create user username identified by password;
username:新用户名的用户名
password: 新用户的密码
也可以不用创建新用户,而仍然用以前的用户,如:继续利用system用登录
2.创建表空间:
create tablespace test_data datafile 'd:\data.dbf' size xxxm;
test_data:表空间的名字
d:\data.dbf':表空间的存储位置
xxx表空间的大小,m单位为兆(M)
3.将空间分配给用户:
alert user username default tablespace test_data;
将名字为tablespacename的表空间分配给username
4.给用户授权:
grant create session,create table,unlimited tablespace to username;
2. 创建表
// 创建一个表 需要注意数据类型别跟SQL的混淆了
CREATE TABLE test_table
(
ID NUMBER NOT NULL PRIMARY KEY,
UserName VarChar2(20) NOT NULL,
PassWord Varchar2(20) Not NULL,
Address Varchar2(20) not null
);
3. 自增列:
Oracle不支持自增长类型,但可以通过序列来实现。
在Oracle中创建标识列,不同于SQL Server中的是,SQLServer中叫自动标识列entity,而Oracle中叫序列Sequence。
create sequence SEQ_USERID --创建一个序列
minvalue 1 --该序列的最小值是1
start with 1 --从1开始递增
increment by 1 --每次递增1
nomaxvalue --没有最大值
nocache; --没有缓存
4. IDENTITY字段
Oracle不支持自增长类型,在向表中插入含有IDENTITY字段的记录时,要显示声明。例如:
Insert into tbl values(序列名.nextval,字段1,字段2,。。。)。
5. 存储过程
ORACLE存储过程在创建时,Create后面多了 or replace.当参数为字符型的时候,不能指定大小。参数默认为 in,输出为out,即输入又输出为in out.。
存储过程中,存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,就使用游标的。在存储过程中没有@符号,变量赋值用:=
create or replace procedure 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围);
变量2 类型(值范围);
Begin
Select count(*) into 变量1 from 表A where列名=param1;
If (判断条件) then
Select 列名 into 变量2 from 表A where列名=param1;
Dbms_output。Put_line(‘打印信息’);
Elsif (判断条件) then
Dbms_output。Put_line(‘打印信息’);
Else
Raise 异常名(NO_DATA_FOUND);
End if;
Exception
When others then
Rollback;
End;
注意事项:
1, 存储过程参数不带取值范围,in表示传入,out表示输出
2, 变量带取值范围,后面接分号
3, 在判断语句前最好先用count(*)函数判断是否存在该条操作记录
4, 用select 。。。into。。。给变量赋值
5, 在代码中抛异常用 raise+异常名。
6. SQL与ORACLE的游标
SQL的游标用@@FETCH_STATUS判断是否还有数据,ORACLE的游标用%FOUND、%NOTFOUND来判断游标是否结束。游标的名称在移植后会有重复。不允许。
7. 连接字符串
SQL的字符串连接用+号,ORACLE字符串连接用||,单引号可以做转义符。因为在sql server中number类型的“+”运算也用到”+”,因此在移植后oracle对于number类型的“+”有时识别不出来,而作为字符连接来处理。
8. 日期类型数据要注意
其格式不同于sql server 中的“yyyy-mm-dd”格式,而是“dd-x月-yyyy“格式。要用to_char(?,’yyyy-mm-dd’)处理成sql server 一样的格式。
9. oracle获取sql语句所影响的行数时,不像sql server 中@@rowcount直接获取那么简单,要分以下三种情况
Oracle中对于隐性游标,获取行数的方法是通过SQL%rowcount直接获得。
对于显性游标获取行数通过cursor_name%rowcount获得,但有以下sql语句:
For index in cusor_name loop
变量名:=cursor_name%rowcount;
End loop;
Fetch into 语句的话,rowcount=1
10. 获得年,月,日在oracle中不支持year(),month()和day()函数。
解决的方法是通过substr()函数。例如获取‘2000-01-10’的‘年’,可以通过substr(‘2000-01-10’,1,4)得到。
11. 部分SQL语句差异
(1)SQL:select top 10 * from table
ORA: select * from table where rownum <11
(2)SQL:Select * from t1 join t2 on t1.c1=t2.c1
ORA: select * from t1,t2 where t1.c1=t2.c1
(3)select * from t1 left join t2 on t1.c1=t2.c1
ORA: select * from t1,t2 where t1.c1=t2.c1(+)
(4)SQL:select * from t1 right join t2 on t1.c1=t2.c1
ORA: select * from t1,t2 where t1.c1(+)=t2.c1