【发布时间】:2016-07-29 14:35:04
【问题描述】:
我正在尝试创建一个将数据从一个表填充到另一个表的过程。如果存在列组合,则更新目标表中的两列。如果不存在列组合,则在目标表中创建或覆盖记录。
有人/任何人可以帮我解决提到的错误吗?我会感激你的。
这是程序。
create or replace PROCEDURE "PRO_1_Table_2_another" AS
CURSOR C1_CUR IS
SELECT D.D1
,SUBSTR(SISR.S1,1,4)
,SISR.S2
,SISR.S3
,SISR.S4
,SISR.S5
,SISR.S6
,SISR.S7
,SISR.S8
,SISR.S9
FROM something_in_system_record SISR
,Dump D
WHERE SUBSTR(SISR.A1,1,4)=D.D1;
TYPE C1_TA is table of C1_CUR%ROWTYPE;
V_C1 C1_TA;
BEGIN
FOR i in C1_CUR LOOP
V_C1 := C1_TA; --Error(26,12): PLS-00330: invalid use of type name or subtype name
MERGE INTO In_something TGT
USING
(SELECT V_C1(i).A1 AS A1,
V_C1(i).A2 AS A2,
V_C1(i).A3 AS A3,
V_C1(i).A4 AS A4,
V_C1(i).A5 AS A5,
V_C1(i).A6 AS A6,
V_C1(i).A7 AS A7,
V_C1(i).A8 AS A8,
V_C1(i).A9 AS A9 --Error(37,19): PL/SQL: ORA-00904: :invalid identifier &&& Error(37,24): PLS-00382: expression is of wrong type
FROM DUAL) SRC
ON (SRC.A1 = TGT.A1
AND SRC.A2 = TGT.A2
AND SRC.A3 = TGT.A3
AND SRC.A4 = TGT.A4
AND SRC.A5 = TGT.A5
AND SRC.A6 = TGT.A6
AND SRC.A7 = TGT.A7
)
WHEN MATCHED THEN
UPDATE SET TGT.A8 = SRC.A8,
TGT.A9 = SRC.A9
WHEN NOT MATCHED THEN
INSERT (TGT.A1
,TGT.A2
,TGT.A3
,TGT.A4
,TGT.A5
,TGT.A6
,TGT.A7
,TGT.A8
,TGT.A9)
VALUES
(SRC.S1
,SRC.S2
,SRC.S3
,SRC.S4
,SRC.S5
,SRC.S6
,SRC.S7
,SRC.S8
,SRC.S9);
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||' - '||SQLERRM);
END PRO_1_Table_2_another;
【问题讨论】:
-
我已经更新了我的问题,指出错误是在哪里产生的。
-
你好像在混合 A1 和 S1 等,它们在两个表中实际上都是一样的吗?
标签: database cursor oracle-sqldeveloper procedure