执行过程返回ORA-65502

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

我实际上是试图在oracle 12.2数据库上执行一个过程。此过程查询视图并创建一个包含结果的网页。

有程序查询:

CREATE OR REPLACE PROCEDURE GET_MYVIEW
AS
    l_cursor   SYS_REFCURSOR;
    clob_size   NUMBER;
    nbr_bcl     NUMBER;
    rmd         NUMBER;
BEGIN
    OPEN l_cursor FOR
        SELECT *
          FROM MY_VIEW;

    APEX_JSON.initialize_clob_output;

    APEX_JSON.open_object;

    APEX_JSON.write ('id',l_cursor);
    APEX_JSON.close_object;

    clob_size := DBMS_LOB.getlength (APEX_JSON.get_clob_output);
    nbr_bcl := ROUND (clob_size / 1000);
    rmd := MOD (clob_size, 1000);

    FOR x IN 0 .. nbr_bcl - 1
    LOOP
        --dbms_output.put_line((x*1000)+1||'  -  '||1000);
        HTP.prn (SUBSTR (APEX_JSON.get_clob_output, (x * 1000) + 1, 1000));
    END LOOP;

    IF rmd > 0
    THEN
        HTP.prn (
            SUBSTR (APEX_JSON.get_clob_output, (nbr_bcl * 1000) + 1, rmd));
    END IF;

    APEX_JSON.free_output;
END;
/

我尝试执行。

execute GET_MYVIEW;

但我收到此错误:

第1行出现错误ORA-06502:PL / SQL:数字或值错误ORA-06512:位于“ SYS.OWA_UTIL”,ligne 354ORA-06512:位于“ SYS.HTP”行1418ORA-06512:位于“ SYS.HTP”行1494ORA-06512:位于“ SYSTEME_BDD.GET_MYVIEW”的第33行ORA-06512:第1行

我进行了一些研究,我认为问题出在衣橱的大小上,但是我尝试的没用。

有关如何解决此问题的任何提示?

json oracle apex clob
1个回答
0
投票

第33行是HTP.prn ( SUBSTR (APEX_JSON.get_clob_output, (nbr_bcl * 1000) + 1, rmd));

[查看HTP.PRN documentation,这需要一个HTP.PRNVARCHAR2DATE自变量。

我的猜测(没有任何数据可用来对其进行测试)是您传递的是NUMBER值。

我认为问题实际上出在线路上:

NULL

并且nbr_bcl := ROUND (clob_size / 1000); 应为ROUND,否则,如果CLOB为1500个字符,则FLOOR将为2(余数为500),而应为1(余数为500)。当您尝试传递余数并且尝试将子字符串从(例如)1500个字符串的第2001个字符传递到第2500个字符时,将出现nbr_bcl值。

解决此问题将使您的程序:

NULL
© www.soinside.com 2019 - 2024. All rights reserved.