Plsql ORA-06550和PLS-00103设置Oracle APEX项目默认值时出错

Plsql ORA-06550和PLS-00103设置Oracle APEX项目默认值时出错,plsql,oracle-apex,Plsql,Oracle Apex,我试图在Oracle APEX 4.2中通过选择具有指定视频ID的表中的第一个值来设置项目的默认值。在项目中,在默认部分下,我设置了默认值Type=PL/SQL EXPRESSION,并在默认值块中输入了默认值 SELECT UNIQUE_ALLEGATION_ID FROM ( SELECT UNIQUE_ALLEGATION_ID FROM TBL_UNIQUE_ALLEGATION WHERE VIDEO_ID = :P2_VIDEO_SELECT) A WHERE ROWN

我试图在Oracle APEX 4.2中通过选择具有指定视频ID的表中的第一个值来设置项目的默认值。在项目中,在默认部分下,我设置了默认值Type=PL/SQL EXPRESSION,并在默认值块中输入了默认值

SELECT UNIQUE_ALLEGATION_ID 
FROM (
  SELECT UNIQUE_ALLEGATION_ID
  FROM TBL_UNIQUE_ALLEGATION
  WHERE VIDEO_ID = :P2_VIDEO_SELECT) A
WHERE ROWNUM <= 1
ORDER BY ROWNUM;
如果我用一个值替换:P2\u VIDEO\u SELECT,那么这段代码在我的Oracle编辑器中运行得很好;我确信:P2\u VIDEO\u SELECT设置正确

但是,当我运行该页面时,会出现以下错误:

ORA-06550:第1行第43列:PLS-00103:在预期以下情况之一时遇到符号选择: -+案例模块新不为空 continue avg count current exists max min Previor sql STDEV总和差异对所有合并时间时间戳间隔日期执行 管
请记住,接受SQL或PL/SQL片段的Apex属性必须在运行时由Apex执行,并且这些属性必须嵌入必须在运行时编译和执行的包装代码中

因此,例如,PL/SQL表达式类型的源可能会以如下方式执行:

declare
  temp_var varchar2(4000);
begin
  temp_var := (
SELECT UNIQUE_ALLEGATION_ID 
FROM (
  SELECT UNIQUE_ALLEGATION_ID
  FROM TBL_UNIQUE_ALLEGATION
  WHERE VIDEO_ID = :P2_VIDEO_SELECT) A
WHERE ROWNUM <= 1
ORDER BY ROWNUM
  );
  --use temp_var somewhere
end;

显然,上面的代码不可能正常工作,这就是为什么您会看到像ORA-06550这样的错误。

这不是PL/SQL表达式,而是SQL查询!我想我并没有注意到Differentionty PL/SQL函数体作为默认类型并声明l_ret NUMBER;开始将SELECT UNIQUE_ALLEGATION_ID从SELECT UNIQUE_ALLEGATION_ID从TBL_UNIQUE_ALLEGATION WHERE VIDEO_ID=:P2_VIDEO_选择一个WHERE ROWNUM顺便说一句,按ROWNUM排序没有意义,根据定义,它将始终进行排序,并且您的查询只返回一条记录。