Error: SyntaxError: JSON.parse Error: Invalid character at position:1 in pl/sql

Error: SyntaxError: JSON.parse Error: Invalid character at position:1 in pl/sql

我收到此错误:

Error: SyntaxError: JSON.parse Error: Invalid character at position:1

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

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

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;

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

下载文件

Download a file by jQuery.Ajax

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

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

时消除将文本附加到 blob