dqlk31541 2014-04-17 07:46
浏览 43
已采纳

Oracle SQL错误

I am trying to work with ORACLE PL/SQL variable but I am having a problem with the :columnType variable

my query is

 $doneStatus = 1;
$cuttingUpdateParse = oci_parse($conn, "UPDATE FABRICATION SET :columnType = $doneStatus
                                        WHERE HEAD_MARK = :headmarkToUpdate AND ID = :idToUpdate");

echo 'PASSED VARIABLE COLUMN TYPE: '.$_POST["columnType"].'<br/>';
echo 'PASSED VARIABLE HEADMARK: '.$_POST["headmark"].'<br/>';
echo 'PASSED VARIABLE ID: '.$_POST["headmark_id"].'<br/>';


oci_bind_by_name($cuttingUpdateParse, ":headmarkToUpdate", $_POST["headmark"]);
oci_bind_by_name($cuttingUpdateParse, ":idToUpdate", $_POST["headmark_id"]);
oci_bind_by_name($cuttingUpdateParse, ":columnType", $_POST["columnType"]);

PASSED VARIABLE COLUMN TYPE: CUTTING PASSED VARIABLE HEADMARK: TEST1 PASSED VARIABLE ID: 2

Warning: oci_execute(): ORA-01747: invalid user.table.column, table.column, or column specification in C:\xampp\htdocs\WeltesInformationCenter\update_bar\process_class.php on line 38

The error is when i am inputting :columnType in the sql query. So anybody has a suggestion on how to make the :columnType dynamically change ?

  • 写回答

1条回答 默认 最新

  • doulu7258 2014-04-17 08:19
    关注

    You try to use bind variable to specify column name at runtime - Oracle prohibits this. It needs to know the object name explicitly. Just use concatenation insteand of binding:

    SQL> declare
      2   column_name varchar2(100) := 'VALUE#';
      3   id int := 2;
      4   val varchar2(10) := 'XXX';
      5  begin
      6    execute immediate
      7    'update t set :column_name = :column_value where id = :id'
      8    using column_name, val, id;
      9  end;
     10  /
    declare
    *
    error in line 1:
    ORA-01747: invalid user.table.column, table.column, or column specification 
    ORA-06512: in  line 6 
    
    
    SQL>   declare
      2   column_name varchar2(100) := 'VALUE#';
      3   id int := 2;
      4   val varchar2(10) := 'XXX';
      5  begin
      6    execute immediate
      7    'update t set '||column_name||' = :column_value where id = :id'
      8    using val, id;
      9  end;
     10  /
    
    PL/SQL procedure completed.
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料