【发布时间】: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。为什么不使用绑定参数?
-
好的,我该如何重写呢?