当我尝试执行此语句时,我收到错误
EXECUTE IMMEDIATE
( 'CREATE TABLE DP.SD_NEW_TEST TABLESPACE DP_TS_TX_DATA INITRANS 10
PARTITION BY RANGE (SALES_DATE)(
PARTITION '''
|| Partition_name
|| ''' VALUES LESS THAN '''
|| MAX_DATET
|| ''' LOGGING
NOCOMPRESS
TABLESPACE DP_TS_TX_DATA INITRANS 10) AS SELECT * FROM DP.SALES_DATA WHERE 1=2'
这里有Partition_name,MAX_DATET值我通过其他查询获取作为我的过程的一部分。如果我在这里做错了,请建议。
答案 0 :(得分:1)
我猜测MAX_DATET
的值没有以可接受的方式格式化。基本上,您需要将日期作为字符串提供适当的数据转换。
如果MAX_DATET
符合ANSI格式yyyy-mm-dd
,则更容易。那么你所需要的就是:
|| ''' VALUES LESS THAN date '''
|| MAX_DATET
|| ''' LOGGING
否则,您需要对to_date()
电话进行编码并提供相应的掩码。
动态SQL很难,因为它将编译错误转变为运行时错误。正如评论者所说,这里明智的做法是将语句组装在一个变量中,该变量可以通过DBMS_OUTPUT显示。当我们看到失败的代码时,调试总是更容易。