0

我必须将值插入 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: at line 102 01747. 00000 - “invalid user.table.column, table.column, or column specification”

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

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;
4

1 回答 1

0

如果您希望额外的列名是“变量”,则不能为此使用绑定变量。这就是您必须首先使用动态 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 数据类型。)这就是你想要做的吗?如果没有,那么您将需要更详细地解释问题 - 您的代码将遇到新的错误。

于 2020-11-22T14:58:27.397 回答