ORACEL总结

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

原文地址:https://www.cnblogs.com/goto/p/2718077.html