• 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);
  • 相关阅读:
    docker镜像构建之docker commit(七)
    docker常用容器命令(五)
    docker常用镜像命令(四)
    如何查看systemctl启动服务的日志
    window server 2012 无法安装.NET framework 3.5 service pack 1
    SpringBoot第六篇-SpringBoot+Mybatis+SpringSecurity+JWT整合,开发工具IDea
    SpringBoot第五篇SpringSecurity 认证机制
    SpringBoot第四篇常见问题
    SpringBoot第三篇SpringBoo和Mybatis整合
    SpringBoot第二章拦截器
  • 原文地址:https://www.cnblogs.com/myjavalife/p/4923176.html
Copyright © 2020-2023  润新知