错误:SyntaxError:JSON.parse错误:位置中的字符无效:pl / sql中为1

时间:2018-03-01 10:45:40

标签: oracle plsql oracle-apex

我收到此错误:

  

错误:SyntaxError:JSON.parse错误:位置无效的字符:1

在提交页面中执行oracle apex5.2中的以下代码, 以下代码用于使用pl/sql中的oracle apex下载文件。

我创建了一个按钮;当我们点击该按钮时,下面的代码将会执行并且提交页面也会发生。

Declare
    dest_loc11  BLOB := empty_blob();
    dest_loc    BLOB := empty_blob();
    dest_loc2   BLOB := empty_blob();
    dest_loc3   BLOB := empty_blob();
    dest_loc4   BLOB := empty_blob();
    dest_loc5   BLOB := empty_blob();
    dest_loc6   BLOB := empty_blob();
    src_loc     BLOB := empty_blob();
    l_zip_file  blob;
    v_length    integer;
    v_inp       varchar2(32767);
    v_count     number;
    n           number:=1;
    v_pr1_idx   number;
    v_pr1_idx2  number;
    V_ID        NUMBER;
    v_pr_1      varchar2(32767):='130614';
    V_RES       VARCHAR2(32767);
    V_PRINT     VARCHAR2(32767):='';
    V_PROMPT    VARCHAR2(32767);
    V_PRINT_RAW BLOB;
    csv_file    utl_file.file_type;
    V_NO_DATA   varchar2(32767);
    v_pr_11     varchar2(32767);

BEGIN       
    DBMS_LOB.CREATETEMPORARY(
        lob_loc => dest_loc11,
        cache   => true,
        dur     => dbms_lob.session
      );
    DBMS_LOB.OPEN(dest_loc11, DBMS_LOB.LOB_READWRITE);

    V_PRINT:='udfhsdhgfszhduhjsdzvcjhzxjcvhzxc';

    V_PRINT_RAW := utl_raw.cast_to_raw( V_PRINT );

    v_length := dbms_lob.getlength(V_PRINT_RAW);

    DBMS_LOB.WRITEAPPEND (
        lob_loc   => dest_loc11,
        amount    => v_length,
        buffer    => V_PRINT_RAW);

    DBMS_LOB.CLOSE(dest_loc11);
    sys.htp.init;

    sys.owa_util.mime_header( 'text/plain', FALSE );

    sys.htp.p('Content-length: ' || sys.dbms_lob.getlength( dest_loc11));

    sys.htp.p('Content-Disposition: attachment; filename="' ||'bala.sql' || '"' );

    sys.htp.p('Cache-Control: max-age=3600');-- tell the browser to cache for one hour, adjust as necessary

    sys.owa_util.http_header_close;

    sys.wpg_docload.download_file( dest_loc11);

    DBMS_LOB.FREETEMPORARY (dest_loc11);
    apex_application.stop_apex_engine;
end;

2 个答案:

答案 0 :(得分:0)

听起来你有一个PL / SQL动态动作,当单击按钮时会触发,然后下载你的文件?不,你不能通过Ajax下载文件。

Download a file by jQuery.Ajax

您需要做的是将用户重定向到其他页面,或者使用不同的REQUEST值返回当前页面,这样您就知道您应该下载该文件。然后,将您的代码放在该页面上的Before Header过程中。

答案 1 :(得分:0)

您需要在页面设计器的页面级别将Reload on Submit设置为Always。然后,您可以成功下载该文件。当Value error小于1时,您的代码也有可能提升v_length。当v_length超出限制1-32767

时,请务必取消将文字附加到blob