oracle 存储过程使用实例

本文详细介绍了如何在Oracle数据库中使用PL/SQL创建包和存储过程,包括包的基本结构、存储过程的定义及调试方法。通过具体实例展示了如何定义存储过程、使用变量数组、执行SQL语句等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.建包


CREATE OR REPLACE PACKAGE PKG_XXX IS

       PROCEDURE proc_main ;
       PROCEDURE proc_xx1  ;
       PROCEDURE proc_xx1_rule(TABLE_NAME  IN VARCHAR2,xxx_NAME IN VARCHAR2);
END PKG_AM_EXP_PREWARNINGS;



2.建包体


CREATE OR REPLACE PACKAGE BODY PKG_XXX IS
  --定义时间  主要用于查询
  default_date constant VARCHAR2(10) := TO_CHAR(SYSDATE, 'YYYY-MM-DD');
  --定义字符串数组类型
  TYPE T_ARRAY IS ARRAY(50) OF VARCHAR2(20);

  --返回字符串数组函数
  FUNCTION GETARR RETURN T_REGION_ARRAY IS
    var_array T_ARRAY;
  BEGIN
    var_array := T_ARRAY('',    
                                '',
                                '');
    RETURN var_array;
  END GETARR;
      --主存储过程调用其他存储过程
       PROCEDURE proc_main AS
       BEGIN
         proc_xx1();
         proc_xx1_rule('','');
       END proc_prewarning_main;
       
      
       procedure proc_xx1 AS 
         --定义字符串数组
         type region_array is varray(50) of varchar2(20);   
        
         var_array1 region_array:=region_array('1','2',
                       '2','3','2',
                       '2','2','2','1','2');
         var_array2 region_array:=region_array('1','2',
                       '2','3','2',
                       '2','2','2','1','2');
         var_array3 region_array:=region_array('1','2',
                       '2','3','2',
                       '2','2','2','1','2');
         BEGIN
          
           for i in 1..var_array1.count loop
             PROC_LOAD_xx('AM_EXP_DEVICE_T',var_array1(i));
           end loop ;
            
            for i in 1..var_array2.count loop
             DBMS_OUTPUT.put_line(123);
             PROC_LOAD_xx('AM_EXP_WORK_CONDITION_T',var_array2(i));
           end loop ;
            
            for i in 1..var_array3.count loop
             PROC_LOAD_xx('AM_EXP_USEELECTRIC_T',var_array3(i));
           end loop ;
         END proc_prewarning_all_wud;
      
       PROCEDURE PROC_LOAD_xx(TABLE_NAME  IN VARCHAR2,
                                       xxx_NAME IN VARCHAR2) IS
         SQLSTR         VARCHAR2(1500);
         TYPENAME       VARCHAR2(20);
       BEGIN
         IF TABLE_NAME = 'AM1' THEN
           TYPENAME := '3';
         ELSIF TABLE_NAME = 'AM2' THEN
           TYPENAME := '2';
         ELSE
           TYPENAME := '1';
         END IF;
       
         SQLSTR := '';
        
         EXECUTE IMMEDIATE SQLSTR
           into xx, xx, xx;
        
         COMMIT;
       EXCEPTION
         WHEN OTHERS THEN
           ROLLBACK;
       END proc_xx1;
       
  procedure proc_xx1_rule(REGION_NAME IN VARCHAR2) IS
    SQLSTR         VARCHAR2(1500);
    --定义一个游标属性
    type RESULT_CUR is ref cursor;
    RESULT_CUR_REF   RESULT_CUR;
    --定义数组
    type region_array is varray(50) of varchar2(20); 
  BEGIN
    var_array1 region_array:=region_array('1','2',
                       '2','3','2',
                       '2','2','2','1','2');
    for i in 1 .. var_array1.count loop
      SQLSTR := '拼接SQL'
      ;
      DBMS_OUTPUT.put_line(SQLSTR);
      --游标结合SQL字符串
      OPEN RESULT_CUR_REF FOR SQLSTR;
      --插入相关信息
      loop
        fetch RESULT_CUR_REF
          into xx, xx, xx, xx;
        exit when RESULT_CUR_REF%NOTFOUND;
        --对取得的数据进行操作
      end loop;
    end loop;
  
    COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
      ROLLBACK;
  END proc_xx1_rule;
END PKG_XXX; 



3.主要的地方

A.包中定义的存储过程如果没有参数则不需要括号。
B.包和包体中的存储过程要一一对应。
C.type region_array is varray(50) of varchar2(20); 是定义数组的意思。
D.定义一个游标属性 type RESULT_CUR is ref cursor;RESULT_CUR_REF   RESULT_CUR;

4.存储过程的DEBUG调试

1.首先右键该存储过程点击Add Debug Information
2.然后右键该存储过程点击Test
3.然后输入需要的参数或不输入
4.然后右键该存储过程点击View 点击行号出现红色叉叉表示断点
5.然后回到Test页面点击F9或页面上最左边的按钮 然后点击Run 一步一步执行则点击Run旁边左边的按钮就行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值