我在 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 行开始。
我在这里发现了一个类似的问题,但是将“dual”更改为“MY_TABLE”的解决方案似乎对我不起作用。
PS:我对 Oracle 很陌生 :)