我实际上是试图在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行
我进行了一些研究,我认为问题出在衣橱的大小上,但是我尝试的没用。
有关如何解决此问题的任何提示?
第33行是HTP.prn ( SUBSTR (APEX_JSON.get_clob_output, (nbr_bcl * 1000) + 1, rmd));
行
[查看HTP.PRN
documentation,这需要一个HTP.PRN
,VARCHAR2
或DATE
自变量。
我的猜测(没有任何数据可用来对其进行测试)是您传递的是NUMBER
值。
我认为问题实际上出在线路上:
NULL
并且nbr_bcl := ROUND (clob_size / 1000);
应为ROUND
,否则,如果CLOB为1500个字符,则FLOOR
将为2(余数为500),而应为1(余数为500)。当您尝试传递余数并且尝试将子字符串从(例如)1500个字符串的第2001个字符传递到第2500个字符时,将出现nbr_bcl
值。
解决此问题将使您的程序:
NULL