Oracle データベースに次の PL/SQL ストアド プロシージャがあります。
PROCEDURE MyProcedure (
p_id IN NUMBER
, p_date IN DATE
, p_num IN NUMBER)
AS
BEGIN
MERGE INTO MY_TABLE mytable
USING (SELECT
p_id,
p_date,
p_num
FROM dual) temp
ON (mytable.myid = temp.p_id AND mytable.mydate = temp.p_date)
WHEN MATCHED THEN
UPDATE SET
DIFFERENCE = temp.p_num,
WHEN NOT MATCHED THEN
INSERT VALUES (
MY_TABLEIDSEQ.NEXTVAL,
temp.p_id,
temp.p_date,
temp.p_num);
END MyProcedure;
MY_TABLE テーブルは次のように定義されています。
CREATE TABLE "MY_DBO"."MY_TABLE"
(
"MYTABLEID" NUMBER(38,0),
"MYID" NUMBER(38,0),
"MYDATE" DATE,
"MYNUM" NUMBER(25,4)
)
ただし、入力フィールドに有効な値を指定してストアド プロシージャを実行すると、次のエラーが発生します。
ORA-00904: "TEMP"."P_DATE": 識別子が無効です
ORA-06512: "MY_DBO.MY_PKG"、54行目
ORA-06512: 18行目
何が原因なのかわかりません。どんな助けでも大歓迎です。ストアド プロシージャは MY_PKG の 45 行目から始まることに注意してください。
ここで同様の問題を見つけましたが、「デュアル」を「MY_TABLE」に変更する解決策はうまくいかなかったようです。
PS:私はOracleに非常に慣れていません:)