【问题标题】:oracle column not allowed here此处不允许使用 oracle 列
【发布时间】:2018-05-15 01:14:48
【问题描述】:

我收到了这个错误:

Error report -
ORA-00984: column not allowed here
ORA-06512: at line 14
00984. 00000 -  "column not allowed here"

这里是代码。我复制并粘贴字段名称(全部大写)。字段名称应正确

set serveroutput on

DECLARE
  my_creation_dt date;
  mysql varchar2(6000) := '';
BEGIN
  select creation_dt into my_creation_dt from role_table where security_role = 'admin';

  mysql := 'insert into role_grant_table (PERSON_ID, CREATION_DT, SECURITY_ROLE, 
    SSS_CREATE_DT, UPDATE_WHO, UPDATE_ON) values (1234, SYSDATE, 
    "ADMIN", 
    :my_creation_dt, 
    "myname", 
    SYSDATE)'; -- line 14, column not allowed here

  execute immediate mysql using (my_creation_dt);

END;

【问题讨论】:

  • 顺便说一句 - 以供将来参考:“第 14 行”将您指向 execute immediate 语句,这是在运行时实际引发异常的地方。

标签: oracle oracle11g


【解决方案1】:

双引号用于括起标识符(通常在它们具有混合大小写或标点符号时)。因此 Oracle 将 "ADMIN""myname" 解释为标识符,在这种情况下,解析器将其视为列名。错误是告诉您此处不允许引用列。

大概,您打算将那些作为要插入的字符串值。采用 用单引号括住字符串文字,即'ADMIN''myname'

【讨论】:

  • 好的,由于您将动态 SQL 语句构建为字符串本身,因此您确实需要转义这些单引号。但这需要两个单引号字符,而不是一个双引号字符。复制并粘贴您的文本,您似乎有双引号字符。
  • 是的,这是转义单引号的方法:stackoverflow.com/questions/11315340/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多