zoukankan      html  css  js  c++  java
  • Oracle 存储过程

    存储过程

    存储过程适合做更多操作,特别是大数据量的更新

    创建存储过程

    create or replace procedure proc1
    as|is    --相当于 declare 声明的意思
    abc varchar2(100);    --定义该存储过程的变量,作用域就是本存储过程中
    begin
    update t_user set username='老王' where id=3;
    commit;
    end;
    /


    例如:

    create or replace procedure proc1
    as
    begin
    update t_user set username='老王' where id=3;
    commit;
    end;
    /

    调用存储过程

    exec proc1;



    带输入参数的存储过程
    创建存储过程

    create or replace procedure proc2(
    param1 varchar2,param2 varchar2     --存储过程的参数    类型不需要指定宽度(范围)
    )
    as
    begin
    insert into t_user values(seq_user.nextval,param1,param2,sysdate);
    commit;
    end;
    /

    执行

    exec proc2('Owen','121212');
    call proc2('Haha','111111');    --在dos窗口下可以

    带输出参数的存储过程

    create or replace procedure proc3(
    param1 in varchar2,param2 out varchar2     --in代表输入参数,out代表输出参数,param0 in out number
    )
    as
    begin
    select password into param2 from t_user where username=param1;
    dbms_output.put_line(param2);
    commit;
    end;
    /

    执行

    set serverout on;
    var pp varchar2(100);
    exec proc3('tom',:pp);


    查询结果返回多个字段的存储过程

    create or replace procedure proc4(
    param1 in varchar2,param2 out varchar2,param3 out varchar2     --in代表输入参数,out代表输出参数,param0 in out number
    )
    as
    begin    --注意:这里只能处理返回的是一条记录结果集,如果结果集含有多条记录,oracle没有提供直接处理的方式,
    --必须间接的接触游标,游标本身的效率很差,所以实际开发中基本上不使用
    select id,password into param2,param3 from t_user where username=param1;
    dbms_output.put_line('查询的结果数据是:id='||param2||'password='||param3);
    commit;
    end;
    /

    执行

    set serverout on;
    var pp1 varchar2(100);
    var pp2 varchar2(100);
    exec proc4('tom',:pp1,:pp2);

    定义变量

    param1 varchar2(100);    --变量的类型可以是oracle系统的所有合法的数据类型
    param2 number;

    用 := 符号 给变量赋值

    param1 :='who am i!';
    param2 :=123;

    判断
    if t_value = 1 then
    begin
    do...
    end;
    end if;

    例:

    create or replace procedure proc_if(pp in number)
    as
    total number;
    begin
    total := pp;
    if total <4 then
    begin
    insert into t_user values(seq_user.nextval,'苏乞儿','666666',sysdate);    
    commit;
    end;
    end if;
    end;
    /
    
    exec proc_if(5);

    while循环
    while t_value = 1 loop
    begin
    do...
    end;
    end loop;

    例:

    create or replace procedure proc_while
    as
    i number;
    begin
    i:=1;
    while i<100 loop
    dbms_output.put_line(i);
    i:=i+1;
    end loop;
    end;
    /
    
    exec proc_while;

    for循环

    for y in 1..100 loop
    i:=x*y;
    exit when i = 300;
    end loop;

    例:

    create or replace procedure proc_for(pp in number)
    as
    x number;
    i number;
    begin
    x:=pp;
    for y in 1..100 loop
    i:=x*y;
    exit when i>300;
    dbms_output.put_line(i);
    end loop;
    end;
    
    exec proc_for(6);
  • 相关阅读:
    数据源与连接池
    JavaBean
    JSP隐含对象
    kibana 报错 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed
    JS中key-value存取
    JS判断数组中是否包含某个值
    数据库的事务
    net 查看版本号
    同行右边浮动
    CodeFirst
  • 原文地址:https://www.cnblogs.com/myjavalife/p/4923176.html
Copyright © 2011-2022 走看看