--创建 Type bodies CREATE OR REPLACE TYPE TYPE_ARRAY AS OBJECT ( ID NUMBER(10), 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 ID, REMARK 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 ID = TO_NUMBER(TYPE_OBJECT(I)); 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 ID = TO_NUMBER(PARAMS(I)); END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK TO SAVEPOINT SP1; END PROC_PARAM; END PKG_PARAM;