在Oracle 12c中使用CLOB时,字符串连接的结果太长

问题描述 投票:2回答:1

使用CLOB字段时,我收到“字符串连接的结果太长”错误。结果字段是

varSQLConcat CLOB;

连接语句是

varSQLConcat := CONCAT(TO_CLOB(varSel_CREATION), TO_CLOB(varWhere_New));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(' AND SY_INPUT_UID_NEW.SUBMISSION_TYPE = '));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB('''CREATION'''));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(' UNION '));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varSel_SUBMISSION));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varWhere_New));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(' AND (SY_INPUT_UID_NEW.SUBMISSION_TYPE = '));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB('''SUBMISSION'''));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB('OR SY_INPUT_UID_NEW.SUBMISSION_TYPE = '));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB('''NEW_W_REG_PARENT'')'));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(' UNION '));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varSel_ROLLOVER));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varWhere_Rollover));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(' UNION '));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varSel_EMBED));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varWhere_Embed));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(' UNION '));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varSel_LIFECYCLE));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varWhere_Lifecycle));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(' UNION '));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varSel_MARK));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varWhere_Mark));
   varSQLConcat := CONCAT(varSQLConcat, TO_CLOB(varOrder_By));

以下语句中发生错误:

OPEN cRecord FOR varSQLConcat; 

这是在Oracle 12c下。

string oracle long-integer clob
1个回答
1
投票

我没有真正的解决方案,但这可能是一个解决方法:

DECALRE

    cmd DBMS_SQL.VARCHAR2A;
    cur PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;
    res INTEGER;
    cRecord := SYS_REFCURSOR;

BEGIN
    cmd(1) := varSel_CREATION; -- each line is limited by 32767 characters!
    cmd(cmd.LAST+1) := varWhere_New;
    cmd(cmd.LAST+1) := 'AND SY_INPUT_UID_NEW.SUBMISSION_TYPE = ';
    cmd(cmd.LAST+1) := '''CREATION'''; 
    ...


    DBMS_SQL.PARSE(cur, cmd, cmd.FIRST, cmd.LAST, TRUE, DBMS_SQL.NATIVE); 
    res := DBMS_SQL.EXECUTE(cur);   
    cRecord := DBMS_SQL.TO_REFCURSOR(cur);

END;
© www.soinside.com 2019 - 2024. All rights reserved.