PL / SQL过程变量而不是insert语句中的列名

时间:2013-05-16 08:06:44

标签: oracle plsql

我想将数据插入到Oracle数据库中,但是我想要插入的列名在第一步中是未知的,这取决于用户的选择。

例如:

colonne varchar(12) :=null;
...
case
  WHEN MOIS1 = 1 THEN 
    colonne :='col1';    
  WHEN MOIS1 = 2 THEN
    colonne :='col2';
  WHEN MOIS1 = 3 THEN
    colonne :='col3';
...    
insert into Mytable ( user_id, name, colonne, ...)

并且它取决于用户colonne可以是col1col2还是col3,是否可以这样做?

1 个答案:

答案 0 :(得分:1)

您不能将变量用作列名,不能。您可以使用动态SQL来构建insert语句,然后绑定该值,但由于您的选择有限,您也可以这样做:

insert into mytable(user_id, name, col1, col2, col3)
values (v_user_id, v_name,
    case when mois1 = 1 then v_value else null end,
    case when mois1 = 2 then v_value else null end,
    case when mois1 = 3 then v_value else null end
);

您将某些内容插入所有三列,但case子句中的values语句决定您是插入null还是实际价值 - 你' ll只将实际值放入三列中的一列。

SQL Fiddle