0
CREATE TABLE T1 (EMP_NAME VARCHAR2 (40));
INSERT INTO t1
VALUES ('Vinoth');
COMMIT;
CREATE TABLE T2 (EMP_NAME VARCHAR2 (40));
CREATE OR REPLACE PACKAGE TEST_PKG_V
AS
PROCEDURE P_MAIN (p_status OUT VARCHAR2);
TYPE T1_TYPE IS RECORD (EMP_NAME T1.EMP_NAME%TYPE);
TYPE T1_TBL IS TABLE OF T1_TYPE;
END TEST_PKG_V;
/
CREATE OR REPLACE PACKAGE BODY TEST_PKG_V
AS
PROCEDURE P_MAIN (p_status OUT VARCHAR2)
IS
LV_T1_TBL T1_TBL := T1_TBL();
CURSOR T1_CUR
IS
(SELECT EMP_NAME FROM t1);
BEGIN
OPEN T1_CUR;
LOOP
FETCH T1_CUR
BULK COLLECT INTO LV_T1_TBL
LIMIT 10000;
INSERT INTO t2 (EMP_NAME)
SELECT EMP_NAME FROM TABLE (LV_T1_TBL);
EXIT WHEN T1_CUR%NOTFOUND;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
p_status := 'FAIL';
RAISE;
END P_MAIN;
END TEST_PKG_V;
/
DECLARE
VAR VARCHAR2(4000);
BEGIN
TEST_PKG_V.P_MAIN(VAR);
END;
プロシージャを実行すると、ORA-00902:無効なデータ型がスローされます。 プロシージャ内のinsert文をコメントアウトすると、完全に正常に動作しています。何が問題なのか、解決に手伝ってください。ORA-00902:無効なデータ型
使用: '1 .. LV_T1_TBL.COUNT LOOP INSERT INSERT INTO T2にFORALLのINDX(EMP_NAME)VALUES(LV_T1_TBL(INDX)); END LOOP; 'あなたのinsertステートメントの場所。 FORALL文の詳細は、[here](http://www.oracle.com/technetwork/issue-archive/2012/12-sep/o52plsql-1709862.html)を参照してください。 – krokodilko