oracle 存储过程红叉,oracle 存储过程基本语法及问题 |
您所在的位置:网站首页 › 红叉啥意思 › oracle 存储过程红叉,oracle 存储过程基本语法及问题 |
存储过程 注 : (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)变量赋值 变量初始化赋值:=值; 变量赋值: select ....into... from ....; --select ... from ... 方法在存储过程中时的格式 select name1,name2 into var1,var2 from table1 (2)For 循环 For ... in ... LOOP --执行语句 end LOOP; 循环遍历游标 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; 循环遍历数组 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('The No.'|| i || 'record in varArray is:'||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.单行注释: --;多行:/**/; |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |