You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle APEX execute immediate含用户查询报ORA-00900如何解决

报错原因

ORA-00900由两个写法错误导致:

  • q'[...]'是Oracle的原生字符串转义语法,方括号包裹的内容才是实际要执行的SQL文本,你在左方括号后多写了一个多余单引号,导致传入execute immediate的文本开头带无效单引号,本身就不符合SQL语法规范。
  • 即使去掉多余单引号,直接把v('APP_USER')硬编码在动态SQL文本中,既存在SQL注入风险,若执行上下文脱离APEX会话环境,还会出现v()函数无法识别、取值为空的问题。
正确实现方案

优先使用绑定变量传参,性能更优、安全性更高,无需在动态SQL内部依赖APEX环境函数:

declare
  l_login_email varchar2(255);
begin
  -- 外层提前获取当前登录用户的小写邮箱
  l_login_email := lower(v('APP_USER'));
  -- 通过绑定变量传入参数执行删除
  execute immediate 'delete from MY_TABLE where USER_EMAIL = :1'
    using l_login_email;
end;
/

如果确定代码只会在APEX会话上下文(页面进程、APEX触发的业务逻辑)中执行,也可以直接修正q字符串的写法,注意不要额外加多余单引号:

begin
  execute immediate q'[delete from MY_TABLE where USER_EMAIL = lower(v('APP_USER'))]';
end;
/

提示:第二种写法不推荐在脱离APEX环境的数据库存储过程、定时任务中使用,会因为缺失APEX会话上下文导致取值失败。

内容的提问来源于stack exchange,提问作者JB999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 07:01:08