Sql Oracle APEX应用程序合并语句-ORA-06550子程序或游标超出范围
我正在尝试为Oracle APEX应用程序编写合并语句。用户填写表单,如果唯一列STVSBGI_代码不存在,则应插入表单,如果STVSBGI_代码存在,则应更新表单。以下是我所写的合并:Sql Oracle APEX应用程序合并语句-ORA-06550子程序或游标超出范围,sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,我正在尝试为Oracle APEX应用程序编写合并语句。用户填写表单,如果唯一列STVSBGI_代码不存在,则应插入表单,如果STVSBGI_代码存在,则应更新表单。以下是我所写的合并: MERGE INTO UA_SATURN.SWBSBGI U USING (SELECT :P5_STVSBGI_CODE, :P5_STATE_CODE, :P5_NCES_SCHOOL_ID, :P5_NCES_DISTRICT_ID, :APP_USER FROM DUAL) V ON (U.STVSBG
MERGE INTO UA_SATURN.SWBSBGI U
USING (SELECT :P5_STVSBGI_CODE, :P5_STATE_CODE, :P5_NCES_SCHOOL_ID, :P5_NCES_DISTRICT_ID, :APP_USER FROM DUAL) V
ON (U.STVSBGI_CODE = V.STVSBGI_CODE)
WHEN MATCHED THEN UPDATE SET
U.STATE_CODE = :P5_STATE_CODE,
U.NCES_SCHOOL_ID = :P5_NCES_SCHOOL_ID,
U.NCES_DISTRICT_ID = :P5_NCES_DISTRICT_ID,
U.ACTIVITY_DATE = SYSDATE,
U.USER_ID = :APP_USER,
U.ACTIVE_IND = 'Y'
WHEN NOT MATCHED THEN INSERT
(
U.STVSBGI_CODE,
U.STATE_CODE,
U.NCES_SCHOOL_ID,
U.NCES_DISTRICT_ID,
U.ACTIVITY_DATE,
U.USER_ID,
U.ACTIVE_IND
)
VALUES
(
:P5_STVSBGI_CODE,
:P5_STATE_CODE,
:P5_NCES_SCHOOL_ID,
:P5_NCES_DISTRICT_ID,
SYSDATE,
:APP_USER,
'Y'
);
下面是我得到的错误:
1 error has occurred
ORA-06550: line 4, column 22: PLS-00225: subprogram or cursor 'V' reference is out of
scope ORA-06550: line 4, column 22: PLS-00306: wrong number or types of arguments in
call to 'STVSBGI_CODE' ORA-06550: line 4, column 22: PL/SQL: ORA-00904:
"V"."STVSBGI_CODE": invalid identifier ORA-06550: line 2, column 1: PL/SQL: SQL
Statement ignored
您需要为SELECT语句中的列添加别名,以便在JOIN中使用它
SELECT :P5_STVSBGI_CODE AS STVSBGI_CODE, ...
谢谢 您需要为SELECT语句中的列添加别名,以便在联接中使用它,例如,
SELECT:P5_STVSBGI_代码作为STVSBGI_代码,…
,就是这样做的!如果你把它作为答案写下来,我会认为它是正确的。谢谢一句忠告(与您的问题无关,但无论如何):我不会在最近的Oracle数据库中使用“V”作为别名,因为它们已经包含APEX中函数的公共同义词V
。。。模式。如果你拼错了一个列名(你会得到一个PLS-306而不是通常的ORA-00904),这会让人非常困惑。好的,我会用另一个字母。谢谢你的警告!