【问题标题】:Oracle Execute Immediate not escaping quote?Oracle Execute Immediate 不转义报价?
【发布时间】:2020-08-05 00:37:32
【问题描述】:
DECLARE
  v_column_exists number := 0;  
BEGIN
  Select count(*) into v_column_exists
    from user_tab_cols
    where upper(column_name) = 'MyCoolColumn'
      and upper(table_name) = 'MyCoolTable';

  if (v_column_exists = 0) then
      execute immediate 'alter table MyCoolTable add (MyCoolColumn varchar2(255))';
      execute immediate 'update MyCoolTable set MyCoolColumn = 'NULL'';
  end if;
end;
/

不幸的是,我收到了 oracle 错误

ORA-06550
PLS-00103 预期时遇到符号“NULL”......

上线:

execute immediate 'update MyCoolTable set MyCoolColumn = 'NULL'';

我知道我正在插入单词“Null”而不是空值。我正在将此列添加到现有表中,并且需要将其设为 Not Null 和主键以及其他两个主键列。如果我删除问题行,则语句执行正常。

我没有正确地转义“Null”吗?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    另一种处理方式:

    execute immediate q'[update MyCoolTable set MyCoolColumn = 'NULL']';
    

    【讨论】:

      【解决方案2】:
      execute immediate 'update MyCoolTable set MyCoolColumn = ''NULL''';
      

      你需要两个引号来转义第一个 ' ,然后三个引号作为结尾,一个用于转义,第二个用于字符串终止。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-10
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        • 2021-06-02
        • 2011-10-21
        • 2011-02-16
        • 2021-11-27
        相关资源
        最近更新 更多