oracle控制语句分享

oracle控制语句:

———-if 语句

if….then

action code;

elseif…then

action code;

else

action code;

end if;

———-loop 循环语句

loop

action code;

exit when v_num=10;–结束判断,这里举个v_num自增长的例子哈

v_num:=v_num+1;

end loop;

———-while 循环语句

while v_num<=0 loop

action code;

v_num:=v_num-1;

end loop;

————还有for循环我就不说啦,自己百度

————-goto 语句,不建议使用

goto fan_sign;–当执行到这儿时,会跳到这个标记处

……– 中间代码省略

<>–比如,跳到这儿,可以是从循环中跳到这儿

————-null,action nothing,read easy

if ……then

action code;

else

null;–action nothing

=================================================

–编写过程,在java中返回参数

— in:表示这是个输入参数,默认为 in

— out:表示这是个输出参数

create or replace procedure fan_pro

(fanum in number, faname out varchar2) is

begin select emame into faname from mytest where empno=fanum;

end;

–java code

callablestatement cs=ct.preparecall(“{call fan_pro(,)}”);

–给第一个赋值

cs.setint(1,101);

–给第二个赋值,注册一个值

cs.registeroutparameter(2, oracle.jdbc.oracletype.varchar);

cs.execute();//execute

string name=cs.getstring(2);//get value,return the second

——————————

返回列表,就是返回多个结果

分两部分:1、建一个包,包包含游标

create package testpackage as

typetest_cursor is ref cursor;

end testpackage;

2、建立过程

create or replace procedure fan_pro

(fanum in number,p_cursor out testpackage.test_cursor) is

begin

open p_cursor for select* from mytest where empno=fanum;

end;

3、在java中调用

callablestatement cs=ct.preparecall(“{call fan_pro(,)}”);

–给第一个赋值

cs.setint(1,101);

–给第二个赋值,注册一个值

cs.registeroutparameter(2, oracle.jdbc.oracletype.cursor);

cs.execute();

resultset rs=(resultset)cs.getobject(2);

while(rs.next()) {

….(rs.getstring(1)+” | “rs.getstring(2));//输出

}

//这仅仅是个例子,我再杜撰一个输出结果

fan | fan

fan1 | fan1

fan2 | fan2

———–case 语句

action code;

case

when v_num<1000 then

action code;

when v_num<2000 then

action code;

end case;

————异常

exception

when case_not_found then//各种内置异常

action code;

各种异常处理

access_info_null(ora-06530):当访问没有初始化的对象时触发。

case_not_found(ora-06592):在case过程中when后没有包含必要的条件分支并且没有else子句,则会触发本异常。

collection_is_null(ora-06531):访问未初始化的集合元素(嵌套表或者varray)。

cursor_already_open(ora-06511):重新打开已经打开的游标。

dup_val_on_index(ora-00001):当中唯一索引所对应的列上键入重复值时。

invalid_cursor(ora-01001):试图在不合法的游标上执行操作时,譬如没打开游标就提取内容。

invalid_number(ora-01722):当试图将非法的字符串转换为数字类型时。

no_data_found(ora-01403):执行select into未返回行,或者引用了索引表未初始化的元素时。

too_many_rows(ora-01422):执行select into返回超过一行数据时。

zero_pide(ora-01476):0作为被除数时。

subscript_beyond_count(ora-06533):使用嵌套表或者varray集合时,如果引用下标超过last。

subscript_outside_limit(ora-06532):使用嵌套表或varray集合时,如果引用下标小于first。

value_error(ora-06502):在执行赋值操作时,如果变量长度不足以容纳实际数据。

login_denied(ora-01017):连接时提供了不正确的用户名或口令。

not_logged_on(ora-01012):在程序没有连接到oracle数据库时执行plsql代码则会触发。

program_error(ora-06501):plsql内部问题。

rowtype_mismatch(ora-06504):执行赋值操作时,如果宿主游标变量和plsql游标变量返回类型不兼容时。

self_is_null(ora-30625):使用对象类型时,如果在null实例上调用成员方法。

storage_error(ora-06500):超出内存空间或者内存被损坏。

sys_invalid_rowid(ora-01410):无效字符串企图转换为rowid类型时。

timeout_on_resource(ora-00051):等待资源时出现超时错误。

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐