oracle 存储过程



  • 语句块定义:
  1. decalre
  2. --变量声明
  3. var1number(2);--仅声明
  4. var2char(2):='11';--在声明的同时初始化
  5. begin
  6. --语句
  7. end;--语句块结束

  • if 语句
ifa=1orb=2then
  • elsifc=3else
  • endif;
  • case 语句
  • case语句如果作为分支控制语句,最后结束语句是end case,如果是作为select语句里的控制语句则只需要end。

    declare
  • numnumber(10):=1;
  • case
  • whennum=0thendbms_output.put_line('zero');
  • whennum=1thendbms_output.put_line('one');
  • elsedbms_output.put_line('default');
  • endcase;
  • casenum
  • when0when1end;
    • for 循环

    for循环主要有两个用处。


    1、 循环一个范围
    格式:for i in [start .. end] loop ... end loop;

    foriin0..9loop
  • dbms_output.put_line('i:'||i);
  • endloop;

  • 2、遍历隐式游标

    隐式游标的好处是不需要手动关闭,方便

    forcurrowin(
  • selectt.col1,t.col2
  • fromtableNamet
  • where...
  • )loop
  • ifcurrow.col1=0return;--中止sp,返回
  • endif;
  • endloop;
  • while 循环
  • isok:=9;
  • whileisok>=0loop
  • isok:=isok-1;
  • ifisok=8continue;--与编程语言的continue语义一样,跳过当前循环的剩余语句,回到循环开始
  • ifisok=4 exit;--与编程语言的break语义一样,跳出循环
  • dbms_output.put_line('isok:'||isok);
  • endloop;
  • dbms_output.put_line('outsidewhileloop.');
  • 存储过程定义
  • createorreplaceproceduresp_name(
  • --入参、出参列表,逗号分隔。
  • uidinvarchar2,--不能带长度信息
  • startDateindate,0); padding:0px; margin:0px; width:auto; border:0px">--第二个输入参数
  • defaultvarinvarchar2default"",0); padding:0px; margin:0px; width:auto; border:0px">--认参数,如果不传,要注意参数的顺序
  • isokoutnumber,0); padding:0px; margin:0px; width:auto; border:0px">--输出参数
  • resultoutvarchar2--第二个输出参数
  • )
  • as
  • --变量声明,每个声明用分号结束。可以在声明的同时初始化
  • var1varchar2(11);
  • var2number(2):=123;
  • --字符串拼接用||
  • dbms_output.put_line('isok:'||'abc');
  • --调用其他存储过程
  • sub_sp_name(param1,prarm2,outParam1,outParam2);
  • --存储过程结束
  • 函数定义
  • functionfunc(
  • returnnumber--定义返回类型
  • returnret_val;
  • 存储过程与函数异同
  • 1、两者定义类似,都可以带输入输出参数。
    2、函数有返回值,存储过程没有。
    3、函数调用要在select语句里;而存储过程不用,可以独立调用

    • 游标

    隐式游标
    隐式游标的好处是不需要手动关闭,方便

    显式游标

    integer;
  • v_event_idnumber(10);
  • v_isagainnumber(2);
  • v_ratenumber(2);
  • v_senderchar(11):='13800138000';
  • cursorcursorVarisselectevent_id,isagain,ratefromcall_eventwheresender=v_sender;--声明游标
  • opencursorVar;--打开游标
  • loop
  • fetchcursorVarintov_event_id,v_isagain,v_rate;--取值
  • exitwhencursorVar%notfound;--当没有记录时退出循环
  • dbms_output.put_line(v_event_id||','||v_isagain||','||v_rate);
  • closecursorVar;--关闭游标
  • --游标的属性有:%FOUND,%NOTFOUNRD,%ISOPEN,%rOWCOUNT;
  • --%FOUND:已检索到记录时,返回true
  • --%NOTFOUNRD:检索不到记录时,返回true
  • --%ISOPEN:游标已打开时返回true
  • --%rOWCOUNT:代表检索的记录数,从1开始
  • 带参数游标

    cursorcursorVar(p_sendervarchar2)wheresender=p_sender;opencursorVar(v_sender);--打开游标,在括号里传参。
    • 语句块定义:
    1. decalre
    2. --变量声明
    3. --仅声明
    4. --在声明的同时初始化
    5. begin
    6. --语句
    7. --语句块结束

    • if 语句
    then
  • else
  • endif;
  • case 语句
  • case语句如果作为分支控制语句,最后结束语句是end case,如果是作为select语句里的控制语句则只需要end。

    declare
  • numnumber(10):=1;
  • case
  • thendbms_output.put_line('zero');
  • thendbms_output.put_line('one');
  • elsedbms_output.put_line('default');
  • case;
  • casenum
  • end;
    • for 循环

    for循环主要有两个用处。


    1、 循环一个范围
    格式:for i in [start .. end] loop ... end loop;

    in0..9loop
  • dbms_output.put_line('i:'||i);
  • endloop;

  • 2、遍历隐式游标

    隐式游标的好处是不需要手动关闭,方便

    in(
  • fromtableNamet
  • where...
  • )loop
  • --中止sp,返回
  • endif;
  • endloop;
  • while 循环
  • isok:=9;
  • whileisok>=0loop
  • isok:=isok-1;
  • --与编程语言的continue语义一样,跳过当前循环的剩余语句,回到循环开始
  • --与编程语言的break语义一样,跳出循环
  • dbms_output.put_line('isok:'||isok);
  • endloop;
  • dbms_output.put_line('outsidewhileloop.');
  • 存储过程定义
  • proceduresp_name(
  • --入参、出参列表,逗号分隔。
  • --不能带长度信息
  • --第二个输入参数
  • --认参数,如果不传,要注意参数的顺序
  • --输出参数
  • --第二个输出参数
  • )
  • as
  • --变量声明,每个声明用分号结束。可以在声明的同时初始化
  • var1varchar2(11);
  • var2number(2):=123;
  • --字符串拼接用||
  • dbms_output.put_line('isok:'||'abc');
  • --调用其他存储过程
  • aram2);
  • --存储过程结束
  • 函数定义
  • functionfunc(
  • --定义返回类型
  • returnret_val;
  • 存储过程与函数异同
  • 1、两者定义类似,都可以带输入输出参数。
    2、函数有返回值,存储过程没有。
    3、函数调用要在select语句里;而存储过程不用,可以独立调用

    • 游标

    隐式游标
    隐式游标的好处是不需要手动关闭,方便

    显式游标

    integer;
  • v_event_idnumber(10);
  • v_isagainnumber(2);
  • v_ratenumber(2);
  • char(11):='13800138000';
  • --声明游标
  • --打开游标
  • loop
  • --取值
  • --当没有记录时退出循环
  • --关闭游标
  • %rOWCOUNT;
  • --%FOUND:已检索到记录时,返回true
  • --%NOTFOUNRD:检索不到记录时,返回true
  • --%ISOPEN:游标已打开时返回true
  • --%rOWCOUNT:代表检索的记录数,从1开始
  • 带参数游标

    --打开游标,在括号里传参。
  • end;
  • 相关文章

    Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
    Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
    Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
    随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
    Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
    Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...