【问题标题】:ORA-06512 - "invalid user.table.column, table.column, or column specification"ORA-06512 - “无效的 user.table.column、table.column 或列规范”
【发布时间】:2021-03-05 09:23:44
【问题描述】:

我必须将值插入到 my_temp_table。一些列存储在 v_ModelsList 变量中。 v_ModelsList 是:Model_7318802U,Model_7304773U,Model_M0347。有必要使用具有这些值的变量,因为这些值可能不同,因此我无法在插入语句中对其进行硬编码。 下面是一段负责插入值的代码:

EXECUTE immediate 
  'insert into my_temp_table(PRODUCTIONLINENO, WEEKSCHEDULED, SCHEDULEDSTARTS,
                             MOVEOUTS, PERCENTAGEMOVES,:ModelsList)
   values (:PRODUCTIONLINENO, :WEEKSCHEDULED, :SCHEDULEDSTARTS, 
           :MOVEOUTS, :PERCENTAGEMOVES, 1, 2, 3)
  '
USING v_ColumnList, i.PRODUCTIONLINENO, i.WEEKSCHEDULED,
      i.SCHEDULEDSTARTS, i.MOVEOUTS, i.PERCENTAGEMOVES;

当我尝试执行时出现错误: ORA-06512:在第 102 行 01747. 00000 - “无效的 user.table.column、table.column 或列规范”

当我在没有来自 valable 的这些列的情况下执行它时,一切正常。

EXECUTE immediate
  'insert into my_temp_table(PRODUCTIONLINENO, WEEKSCHEDULED, SCHEDULEDSTARTS, 
                             MOVEOUTS,PERCENTAGEMOVES)         
   values(:PRODUCTIONLINENO, :WEEKSCHEDULED, :SCHEDULEDSTARTS, 
          :MOVEOUTS, :PERCENTAGEMOVES)
  '
USING i.PRODUCTIONLINENO, i.WEEKSCHEDULED, i.SCHEDULEDSTARTS,
      i.MOVEOUTS, i.PERCENTAGEMOVES;

【问题讨论】:

  • 看看我是如何格式化你的代码的。仅对内联代码使用反引号 - 它们不适用于代码块。对于代码块,选择文本,然后按 CTRL-K 或使用格式工具栏中的代码块格式图标 {}(在您创建或编辑帖子时位于窗口顶部)。

标签: sql oracle plsql dynamic-sql ora-06512


【解决方案1】:

如果您希望额外的列名是“变量”,则不能为此使用绑定变量。这就是您必须首先使用动态 SQL 的原因。

而是:

EXECUTE immediate 
  'insert into my_temp_table(PRODUCTIONLINENO, WEEKSCHEDULED, SCHEDULEDSTARTS,
                             MOVEOUTS, PERCENTAGEMOVES,'
    || v_ColumnList || ')'
   values (:PRODUCTIONLINENO, :WEEKSCHEDULED, :SCHEDULEDSTARTS, 
           :MOVEOUTS, :PERCENTAGEMOVES, 1, 2, 3)
  '
USING i.PRODUCTIONLINENO, i.WEEKSCHEDULED, i.SCHEDULEDSTARTS,
      i.MOVEOUTS, i.PERCENTAGEMOVES;

(未测试,因为您没有提供测试用例;但这是一般的想法,即使它并不完全正确。)注意v_ColumnList 的使用位置 - 它被连接到 SQL 语句中,而不是通过作为绑定变量。

问题:您在末尾添加三个硬编码值:1、2、3。这意味着您的“列列表”将准确命名表的三列,而这些列尚未包含在硬编码的。 (而且,它们应该是 NUNBER 数据类型。)这就是你想要做的吗?如果不是,那么您将需要更详细地解释问题 - 您的代码会遇到新的错误。

【讨论】:

    猜你喜欢
    • 2012-03-16
    • 2018-12-19
    • 2013-04-28
    • 2015-05-01
    • 2013-10-21
    • 2016-10-25
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多