对于Oracle SQL宏,字符串文字太长

4jb9z9bj  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(102)

我正在尝试为一个很长的SQL语句创建一个Oracle SQL宏。但是由于SQL语句的长度,我得到了“字符串文字太长”错误。有没有人找到解决这个错误的方法?
创建宏时的示例:

CREATE OR REPLACE FUNCTION MACRO_FUNC(arg1 VARCHAR2)
RETURN CLOB SQL_MACRO IS
BEGIN

RETURN TO_CLOB('

*Very long SELECT statement here*

');

END;

首先,我将SELECT语句作为字符串字面量(例如。q'*SELECT语句“),但是因为我得到了”字符串文字太长“错误,我把SELECT语句扔到了TO_CLOB()函数中,但是我仍然得到了同样的错误。

gopyfrb3

gopyfrb31#

问题是字符串文字'...'在每个文字中被限制为4000字节。你需要做的是:将文字拆分为更小的文字;或者从文件中读取文字。
在您的案例中:

CREATE OR REPLACE FUNCTION MACRO_FUNC(arg1 VARCHAR2)
RETURN CLOB SQL_MACRO IS
BEGIN

RETURN EMPTY_CLOB()
       || 'First 4000 bytes of the statement'
       || 'Second 4000 bytes of the statement'
       -- ...
       || 'Nth 4000 bytes of the statement';

END;

或:

CREATE OR REPLACE FUNCTION MACRO_FUNC(arg1 VARCHAR2)
RETURN CLOB SQL_MACRO IS
BEGIN

RETURN TO_CLOB('First 4000 bytes of the statement')
       || 'Second 4000 bytes of the statement'
       -- ...
       || 'Nth 4000 bytes of the statement';

END;

相关问题