Ich versuche, eine Prozedur zu erstellen, die Daten aus einer Tabelle in einer anderen Tabelle auffüllt. Wenn die Kombination von Spalten vorhanden ist, werden zwei Spalten in der Zieltabelle aktualisiert. Wenn keine Kombination von Spalten vorhanden ist, wird in der Zieltabelle ein Datensatz erstellt oder überschrieben.Oracle Prozedurfehler PLS-00330, ORA-00904: ungültiger Bezeichner und Fehler (37,24): PLS-00382
Kann jemand/jemand bitte mir helfen, die genannten Fehler zu beheben? Ich werde dir verpflichtet sein.
Hier ist das Verfahren.
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;
Ich habe meine Frage aktualisiert, die angibt, wo die Fehler generiert werden. – ishan
Sie scheinen A1 und S1 usw. zu mischen, sind sie alle in beiden Tabellen gleich? –