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

Oracle insert语句中的PL/SQL过程变量而不是列名,oracle,plsql,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 (

我想将数据插入到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
可以是
col1
col2
col3
,可以这样做吗?

不能像那样使用变量作为列名,不可以。可以使用动态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
);
在这三列中都插入了一些内容,但是
values
子句中的
case
语句决定了是插入
null
还是插入实际值-您只会将实际值放入这三列中的一列


.

我现在就试试,但是否可以在sql语句中使用case?@devosJava-yes;我已经添加了一个用于演示的。抱歉,但我还有另一个限制,关于插入。。。。选择(…)逻辑仍然相同?@devosJava-是的;证明。不知道你为什么不试试。。。