欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle控制语句分享

程序员文章站 2023-11-23 14:22:46
oracle控制语句: ----------if 语句 if....then action code; elseif...then action code; else action code; en...

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):等待资源时出现超时错误。