wtuyss 发表于 2018-9-11 12:09:20

Oracle编写带数组参数的存储过程

  -功能:采用存储过程、type组合来实现批量操作,以节省系统开销,提高效率。

  --创建 Type bodies
  CREATE OR REPLACE TYPE TYPE_ARRAY AS OBJECT
  (

  >  REMARK VARCHAR2(10)
  )
  --创建 Types
  CREATE OR REPLACE TYPE TYPE_ARRAY_TBL AS TABLE OF TYPE_ARRAY
  --创建表
  CREATE TABLE T_TEMP(ID NUMBER(10) NOT NULL, REMARK NUMBER(10))
  --创建存储过程
  CREATE OR REPLACE PROCEDURE PROC_ARRAY_PARAM(TYPE_OBJECT IN TYPE_ARRAY_TBL) IS
  BEGIN
  INSERT INTO T_TEMP
  (ID, REMARK)

  SELECT>  FROM THE (SELECT CAST(TYPE_OBJECT AS TYPE_ARRAY_TBL) FROM DUAL);
  FOR I IN 1 .. TYPE_OBJECT.COUNT LOOP

  DELETE FROM T_TEMP WHERE>  END LOOP;
  COMMIT;
  END;
  END PROC_ARRAY_PARAM;
  --创建包
  CREATE OR REPLACE PACKAGE PKG_PARAM AS
  TYPE ARRAY_PARAMS IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER; --先定义包,这个就相当于一个数组
  PROCEDURE PROC_PARAM(PARAMS IN ARRAY_PARAMS);
  END PKG_PARAM;
  --创建包体
  CREATE OR REPLACE PACKAGE BODY PKG_PARAM AS
  PROCEDURE PROC_PARAM(PARAMS IN ARRAY_PARAMS) AS
  I NUMBER := 1; --这个可以不写
  BEGIN
  SAVEPOINT SP1;
  FOR I IN 1 .. PARAMS.COUNT LOOP

  DELETE FROM T_TEMP WHERE>  END LOOP;
  COMMIT;
  EXCEPTION
  WHEN OTHERS THEN
  ROLLBACK TO SAVEPOINT SP1;
  END PROC_PARAM;
  END PKG_PARAM;

页: [1]
查看完整版本: Oracle编写带数组参数的存储过程