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 --该序列的最小值是1start with 1 --从1开始递增increment by 1 --每次递增1nomaxvalue --没有最大值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
转载于:https://www.cnblogs.com/goto/archive/2012/10/10/2718077.html
