PL/SQL Oracle 11g 记录组

Posted

技术标签:

【中文标题】PL/SQL Oracle 11g 记录组【英文标题】:PL/SQL Oracle 11g Record Groups 【发布时间】:2015-07-01 20:01:14 【问题描述】:

从 6i 升级到 Oracle 11g 融合中间件。如何将记录组从表单传递到报表?我们使用的是 DATA_PARAMETER,但我知道这不再是一种选择。

【问题讨论】:

假设您正在讨论 Oracle Forms 中的记录组,将用于生成该组的 sql 复制到 Reports 参数中不是更容易吗?然后,您可以使用 bing 变量从表单传递记录组的任何参数 - 请参阅 docs.oracle.com/cd/E23943_01/bi.1111/b32122/… 它看起来就像只是在 Oracle 报告中的查询中添加一个绑定变量,例如:parm1 将提示创建一个参数并将其添加到参数表单中 【参考方案1】:

这是调用报告的示例代码,请参阅 for 循环。这是一个破坏参数并将其传递给 run_report_object 的示例。

https://www.oracle.com/technetwork/developer-tools/forms/frmrepparamform-128021.pdf

PROCEDURE RUN_REPORT_OBJECT_PROC(
report_id REPORT_OBJECT,
report_server_name VARCHAR2,
report_format VARCHAR2,
report_destype_name NUMBER,
report_file_name VARCHAR2,
report_otherparam VARCHAR2,
reports_servlet VARCHAR2) IS
report_message VARCHAR2(100) :=’’;
rep_status VARCHAR2(100) :=’’;
vjob_id VARCHAR2(4000) :=’’;
hidden_action VARCHAR2(2000) :=’’;
v_report_other VARCHAR2(4000) :=’’;
i number (5);
c char;
c_old char;
c_new char;
BEGIN
 VHWWLQJ 5HSRUWV UXQWLPH SDUDPHWHUV
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_COMM_MODE,
SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_FILENAME,
report_file_name);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_SERVER,
report_server_name);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESTYPE,
report_destype_name);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESFORMAT,
report_format);
 FUHDWLQJ VWULQJ IRU SIDFWLRQ SDUDPHWHU
hidden_action := hidden_action ||’&report=’||
GET_REPORT_OBJECT_PROPERTY(report_id,REPORT_FILENAME);
hidden_action := hidden_action||’&destype=’||
GET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESTYPE);
hidden_action := hidden_action||’&desformat=’||
GET_REPORT_OBJECT_PROPERTY (report_id,REPORT_DESFORMAT);
hidden_action := hidden_action ||’&userid=’
||get_application_property(username)||’/’||
get_application_property(password)||’@’||
get_application_property(connect_string);
c_old :=’@’;
FOR i IN 1..LENGTH(report_otherparam) LOOP
c_new:= substr(report_otherparam,i,1);
IF (c_new =’ ’) THEN
c:=’&’;
ELSE
c:= c_new;
END IF;
-- eliminate multiple blanks
IF (c_old =’ ’ and c_new = ’ ’) THEN
null;
ELSE
v_report_other := v_report_other||c;
END IF;

c_old := c_new;

hidden_action := hidden_action ||’&’|| v_report_other;
 

hidden_action := reports_servlet||’?_hidden_server=’||report_server_name
|| encode(hidden_action);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_OTHER,’pfaction=’||
hidden_action||’ ’||report_otherparam);
-- run Reports
report_message := run_report_object(report_id);
rep_status := report_object_status(report_message);
IF rep_status=’FINISHED’ THEN
vjob_id :=substr(report_message,length(report_server_name)+2,length
(report_message));
WEB.SHOW_DOCUMENT(reports_servlet||’/getjobid’||vjob_id||’?server=’||
report_server_name,’ _blank’);
ELSE
--handle errors
null;
END IF;
END;

【讨论】:

以上是关于PL/SQL Oracle 11g 记录组的主要内容,如果未能解决你的问题,请参考以下文章

oracle 11g 中 for 循环中的 PL/SQL 限制

并行执行 oracle PL/SQL [重复]

Oracle11g及PL/SQL Developer的安装

用于 oracle 11g 的 PL/SQL 中的嵌入式脚本 [重复]

Oracle PL/SQL表记录类型

PL/SQL Developer连接本地Oracle 11g 64位数据库