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;  --当执行到这儿时,会跳到这个标记处

  ......        -- 中间代码省略

<<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

type test_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_divide(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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值