zoukankan      html  css  js  c++  java
  • Oracle笔记 十、PL/SQL存储过程

    --create or replace 创建或替换,如果存在就替换,不存在就创建
    create or replace procedure p
    is
      cursor c
      is
      select * from dept2 for update;
    begin
      for row_record in c loop
        if (row_record.deptno = 30) then
          update dept2 set dname = substr(dname, 0, length(dname) - 3) where current of c;
        end if;
      end loop;
    end;
     
    exec p;
     
    begin
    p;
    end;
     
    --带参存储过程
    --in 输入参数,不带in out 默认输入参数
    --out 输出参数
    --in out 同时带的是输入输入参数
    create or replace procedure p2(
           a in number,
           b number,
           s_result out number,
           s_temp in out number
      )
    is
    begin
      if (a > b) then
        s_result := a;
      else
        s_result := b;
      end if;
      s_temp := s_temp + 3;
    end;
     
    --调用存储过程
    declare
      v_a number := 4;
      v_b number := 6;
      v_result number;
      v_temp number := 5;
    begin
      p2(v_a, v_b, v_result, v_temp);
      dbms_output.put_line(v_a);
      dbms_output.put_line(v_b);
      dbms_output.put_line(v_result);
      dbms_output.put_line(v_temp);
    end;
     
    ---删除一个表的过程
    create or replace procedure drop_table(tname varchar2)
    as
      total int := 0;
    begin
         select count(*) into total from user_tables 
                where table_name = upper(tname);
         if total >= 1 then
            execute immediate 'drop table '||tname; --此处必须用动态sql
         end if;
    end;
    select * from user_tables;
     
    --递归存储过程
    create or replace procedure pro_emp(sEmpno emp.empno%type, sLevel integer)
    is
           cursor c is select * from emp where mgr = sEmpno;
           prefixStr varchar(255);
    begin
      for i in 1..sLevel loop
        prefixStr := prefixStr || '----';
      end loop;
      
      for row_data in c loop
        dbms_output.put_line(prefixStr || row_data.ename);
        pro_emp(row_data.empno, sLevel + 1);
      end loop;
    end;
     
    select * from emp;
    begin
      pro_emp(7839, 0);
    end;
  • 作者:hoojo
    出处:
    blog:http://blog.csdn.net/IBM_hoojo
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权所有,转载请注明出处 本文出自:
分享道版权所有,欢迎转载,转载请注明出处,谢谢
收藏
关注
评论
查看全文
  • 相关阅读:
    linux信号
    APM浅析
    Jackson高并发情况下,产生阻塞
    [转]slf4j 与log4j 日志管理
    2015-09-27 git学习
    MySQL学习笔记-锁相关话题
    MySQL学习笔记-MySQL数据库优化实践[转]
    MySQL学习笔记-事务相关话题
    几个关于网站架构和性能的问题(我在知乎上的问答)
    MySQL学习笔记-数据库文件
  • 原文地址:https://www.cnblogs.com/hoojo/p/2035388.html
  • Copyright © 2011-2022 走看看