Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle APEX应用程序合并语句-ORA-06550子程序或游标超出范围_Sql_Oracle_Oracle Apex - Fatal编程技术网

Sql Oracle APEX应用程序合并语句-ORA-06550子程序或游标超出范围

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

我正在尝试为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.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),这会让人非常困惑。好的,我会用另一个字母。谢谢你的警告!