oracle apex应用程序进程PLSQL编写为使用存储在DB表中的BLOB布局打印报告

时间:2019-01-17 07:49:17

标签: sql oracle plsql oracle-apex

我使用Oracle Publisher解决方案进行打印,我在共享组件中为它们编写了oracle apex报告和查询,这与通常的打印配置(Oracle Publisher解决方案)唯一不同的配置是保留RTF布局文件不是在顶点本身中,而是在我自己创建的表中。现在我遇到了一个问题,我不知道是什么原因造成的。当我想将报告打印为pdf格式时,会看到错误“无效的lob定位器”。现在我有一个线索是,如果我在APEX中上传RTF文件,一切正常,并且打印的pdf看起来还可以,但是如果我在报告查询中选择“使用通用报告布局”,那么应用程序过程中的代码将得到从数据库的布局中,我看到“无效的lob定位符”错误。

问题不在桌子上,因为我已经检查了数千次。 因此,可能导致此问题的因素是连接到DB并获取布局然后发送打印命令的PLSQL应用程序过程代码。

这是代码:

declare

    l_file_as_clob CLOB ;
    l_layout BLOB;
    l_asdsad CLOB;

    l_dest_offset integer := 1;
    l_src_offset integer := 1;
    l_lang_context integer := dbms_lob.default_lang_ctx;
    l_warning integer;
BEGIN


    select layout into l_layout
    from B5REPORTS
    where code = :APP_PRINT_LAYOUT_CODE
    AND APEX_APP_ALIAS = :APP_ALIAS 
    AND APEX_PAGE_ID = :APP_PAGE_ID ;

    dbms_lob.createtemporary(lob_loc => l_file_as_clob , cache => false);


    dbms_lob.converttoclob(
        dest_lob => l_file_as_clob
      , src_blob => l_layout
      , amount => dbms_lob.lobmaxsize
      , dest_offset => l_dest_offset
      , src_offset => l_src_offset
      , blob_csid => dbms_lob.default_csid
      , lang_context => l_lang_context
      , warning => l_warning);


    l_file_as_clob:= replace(l_file_as_clob,'+','%2B');
    l_file_as_clob:= replace(l_file_as_clob,'/','%2F');
    l_file_as_clob:= replace(l_file_as_clob,'=','%3D'); 


    --signature 2
    apex_util.download_print_document (
        p_file_name => :APP_PRINT_NAME
      , p_content_disposition => 'inline'
      , p_application_id => :APP_ID
      , p_report_query_name => :APP_PRINT_NAME
      , p_report_layout => l_file_as_clob
      , p_report_layout_type => 'rtf'
      , p_document_format => 'PDF'
    );

END;

这也是存储BLOBS(RTF布局文件)的表:

    ALTER TABLE FARA.B5REPORTS
ADD CONSTRAINT B5REPORTS_UK1 UNIQUE 
(
  CODE 
)
USING INDEX B5REPORTS_UK1
ENABLEALTER TABLE FARA.B5REPORTS
ADD CONSTRAINT B5REPORTS_PK PRIMARY KEY 
(
  ID 
)
USING INDEX B5REPORTS_PK
ENABLECREATE UNIQUE INDEX FARA.B5REPORTS_PK ON FARA.B5REPORTS (ID ASC) 
LOGGING 
TABLESPACE APEX 
PCTFREE 10 
INITRANS 2 
STORAGE 
( 
  INITIAL 65536 
  NEXT 1048576 
  MINEXTENTS 1 
  MAXEXTENTS UNLIMITED 
  BUFFER_POOL DEFAULT 
) 
NOPARALLEL
CREATE UNIQUE INDEX FARA.B5REPORTS_UK1 ON FARA.B5REPORTS (CODE ASC) 
LOGGING 
TABLESPACE APEX 
PCTFREE 10 
INITRANS 2 
STORAGE 
( 
  INITIAL 65536 
  NEXT 1048576 
  MINEXTENTS 1 
  MAXEXTENTS UNLIMITED 
  BUFFER_POOL DEFAULT 
) 
NOPARALLELCREATE TABLE FARA.B5REPORTS 
(
  ID NUMBER NOT NULL 
, CODE VARCHAR2(100 BYTE) NOT NULL 
, LAYOUT BLOB NOT NULL 
, DESCRIPTION VARCHAR2(4000 BYTE) NOT NULL 
, NAME VARCHAR2(4000 BYTE) NOT NULL 
, APEX_APP_ALIAS VARCHAR2(100 BYTE) NOT NULL 
, APEX_PAGE_ID NUMBER NOT NULL 
) 
LOGGING 
TABLESPACE APEX 
PCTFREE 10 
INITRANS 1 
STORAGE 
( 
  INITIAL 65536 
  NEXT 1048576 
  MINEXTENTS 1 
  MAXEXTENTS UNLIMITED 
  BUFFER_POOL DEFAULT 
) 
NOCOMPRESS 
NOPARALLEL 
LOB (LAYOUT) STORE AS SYS_LOB0000103483C00003$$ 
( 
  ENABLE STORAGE IN ROW 
  CHUNK 8192 
  NOCACHE 
  LOGGING  
)

我还将添加一些示例数据的图片。

我会很感激任何评论,想法或其他任何事情,因为我真的被困在这里。感谢进阶。:)enter image description here

0 个答案:

没有答案