私はPL/SQLにかなり慣れていませんが、次のことを達成する方法があるかどうか疑問に思っていました:
INSERT INTO aTable (
SELECT FN_TO_VALUE(b.field1, b.field2, b.field3) as alias1,
FN_TO_VALUE(b.field1, b.field2, b.field3) as alias2,
FN_TO_VALUE(b.field1, b.field2, b.field3) as alias3,
c.field1, c.field2
FROM bTable b, cTable c
WHERE b.alias1= c.field3
);
FN_TO_VALUEがaTableにある対応するデータ型を返す関数であるとします。
次のエラーステートメントが表示されます。
PL/SQL : SQL Statement ignored (that's located at the INSERT INTO line)
PL/SQL : ORA-00904: "B"."ALIAS1" invalid identifier
正誤表:
- @Bob Jarvis によって提供されたソリューションの 1 つはテーブルをリンクするために必要な他のフィールドを考慮しないため、where 句をWHERE b.alias1= c.field1からWHERE b.alias1= c.field3 に変更する必要がありました。 bTable と cTable。
解決 :
私は次の解決策を選択しました:
INSERT INTO aTable ( SELECT b.alias1, b.alias2, b.alias3, c.field1, c.field2 FROM cTable c, ( SELECT FN_TO_VALUE (field1, field2, field3) AS alias1, FN_TO_VALUE (field1, field2, field3) AS alias2, FN_TO_VALUE (field1, field2, field3) AS alias3 FROM bTable ) b WHERE b.alias1 = c.field3 );