【问题标题】:Execute immediate UPDATE Statement立即执行 UPDATE 语句
【发布时间】:2017-11-17 22:39:01
【问题描述】:

我尝试将 CHECK_COMPRESSER 更新为 PROCEDURE 并使用 EXECUTE IMMEDIATE

EXECUTE immediate 'update CHECK_COMPRESSER 
set NEW_SIZE_MB = '||''''||TABLE_P_ENTRY.NEW_SIZE_MB || '''' ||
 ' WHERE EXEC_ID = ' || '''' || EXEC_ID || '''' || ' AND TABLE = ' || '''' || TABLE_P_ENTRY.SEGMENT_NAME || '''' || ' AND PARTITION = ' || '''' || TABLE_P_ENTRY.PARTITION_NAME || '''';

dbms_output.put_line 显示:

update CHECK_COMPRESSER set NEW_SIZE_MB = '182' WHERE EXEC_ID = '43' AND TABLE = 'MA_CONTACT_COMPRESS' AND PARTITION = 'P_OLD'

但是有一个错误:

ORA-00936:缺少表达式 ORA-06512:在“SASDBA.COMPRESS_TABLE”处, 第 50 行

那么,我应该如何编辑这段代码?

【问题讨论】:

  • 为什么将数字数据写成字符串文字? (例如'43'。)
  • 我认为这里根本不需要动态 SQL。为什么不使用绑定参数?
  • 好的,我该如何重写呢?

标签: sql oracle plsql


【解决方案1】:

TABLE 是一个关键字。只有在引用时才能用作标识符:“TABLE”。

附: PARTITION 是一样的。

【讨论】:

  • 将其替换为 TABLE_NM 和 PARTITION_NM。现在,它可以工作了
猜你喜欢
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多