随笔-9  评论-168  文章-266  trackbacks-0
存储过程
注 : 
(1)在procedure中想用ddl,就必须用execute   immediat 'create table text1(id int not null primary key)';
且必须显授权(grant create any table to 用户名),否则报'insufficient privileges',无权限.
(2)每条语句都需以';'结尾.
1.基本语法 : 创建一个存储过程,如果存在就覆盖.  (注:as/is没区别,只是兼容别的SQL而已)
create or replace procedure  过程名(参数1 in number ,参数2 in number) is
变量1 integer:=0;
变量2 date;
exp   exception;  --定义异常
begin
    --存储过程中调用DDL,必须用动态SQL方法
    execute  immediate ' create table testtable (testid int not null primary key,testname varchar2(10) ) ';
    execute   immediate   'insert   into   testtable values(1,110) '; 
   raise   exp;    --抛出异常
exception        --异常处理
    when   exp   then 
    dbms_output.put_line( '执行成功1 ');    --控制台打印
    when   others   then 
    dbms_output.put_line( '执行失败0 '); 
end;
2.基本语句:
(1)变量赋值
<1>变量初始化赋值:=值;
<2>变量赋值: select ....into... from ....;     --select ... from ... 方法在存储过程中时的格式
select name1,name2 into var1,var2 from table1 
(2)For 循环
For ... in ... LOOP
--执行语句
end LOOP;
<1>循环遍历游标
create or replace procedure test() as
    Cursor cursor is select name from student; name varchar(20);
begin
    for name in cursor LOOP
    begin
        dbms_output.putline(name); 
    end;
    end LOOP;
end test;
<2>循环遍历数组
 create or replace procedure test(varArray in myPackage.TestArray) as
--(输入参数varArray 是自定义的数组类型,定义方式见标题6)
i number;
begin
i := 1;  --存储过程数组是起始位置是从1开始的,与java、C、C++等语言不同。因为在Oracle中本是没有数组
的概念的,数组其实就是一张
--表(Table),每个数组元素就是表中的一个记录,所以遍历数组时就相当于从表中的第一条记录开始遍历
for i in 1..varArray.count LOOP     
dbms_output.putline(&apos;The No.&apos;|| i || &apos;record in varArray is:&apos;||varArray(i));   
 end LOOP;
end test;
3.代码抛出异常用raise (异常名);
4.游标 : 
(1)系统级游标:cursor SYS_REFCURSOR;只能通过open方法打开和赋值
OPEN cursor FOR select name1,name2 from table1 where a='1';  --sql语法
LOOP
    FETCH cursor INTO name1,name2;    --只能通过fetch into 打开和遍历
    exit when cursor%NOTFOUND;         --可用三个状态:%NOTFOUND(未找到记录);%FOUND(找到记
录);%ROWCOUNT(当前游标指向的行位置)
     dbms_output.putline(name1||name2);
END LOOP;
5.连接运算符 : || ,即'ABC'||'123' : ABC123
6.单行注释: --;多行:/**/;
posted on 2011-06-20 17:12 紫蝶∏飛揚↗ 阅读(973) 评论(0)  编辑  收藏 所属分类: 数据库

只有注册用户登录后才能发表评论。


网站导航: