【问题标题】:column not allowed here error in oracle SQL insertoracle SQL插入中的列不允许此处错误
【发布时间】:2018-07-03 09:52:29
【问题描述】:

您好,我在尝试将 INPUT 参数插入错误表时遇到此错误

CREATE OR REPLACE PROCEDURE consolidate_SI(  
primary_SI   IN NUMBER,  
secondary_SI IN NUMBER )  
IS  
v_primary_si number;  
v_secondary_si number;   
Begin  
 v_primary_si:= primary_si;  
EXECUTE IMMEDIATE 'insert into error_log ( identifier, error_message) values 
(''Successfully updated'',v_primary_si)';  
execute immediate 'commit';  
End;   

我在运行时收到以下错误

ORA-00984:此处不允许列

【问题讨论】:

  • 欢迎来到 Stack Overflow。您可以使用Code Sample {} 工具栏按钮格式化源代码——这次我已经为您完成了。您还在编辑器正下方有一个预览窗格,因此您可以在发布更改之前查看更改的外观。

标签: sql oracle ora-00947


【解决方案1】:

您不需要动态 SQL:

CREATE OR REPLACE PROCEDURE consolidate_SI(primary_SI IN NUMBER, secondary_SI IN NUMBER) IS
    v_primary_si                            NUMBER;
    v_secondary_si                          NUMBER;
BEGIN
    v_primary_si    := primary_si;

    insert into error_log ( identifier, error_message) values ('Successfully updated',v_primary_si);

    commit;
END;

此外,问题在于您在动态 SQL 中引用变量 v_primary_si 的方式。

【讨论】:

  • 快速简单!谢谢!
【解决方案2】:

动态 SQL 上下文不知道 v_primary_si 是什么 - PL/SQL 变量不在该 SQL 上下文的范围内 - 因此默认情况下它会将其视为列标识符:因此出现错误。要使用 PL/SQL 变量,您可以使用并将其作为绑定变量提供:

EXECUTE IMMEDIATE 'insert into error_log ( identifier, error_message) values 
  (''Successfully updated'',:v_primary_si)'
USING v_primary_si;  

但是这里的提交和提交都不需要是动态的,你可以这样做:

Begin
  v_primary_si:= primary_si; -- presumably you need this as a new variable later?
  insert into error_log ( identifier, error_message)
  values ('Successfully updated', v_primary_si);
  commit;
End;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多