如何从 BI Publisher 调用存储过程?
Posted
技术标签:
【中文标题】如何从 BI Publisher 调用存储过程?【英文标题】:How to call Stored Procedure from BI Publisher? 【发布时间】:2015-10-22 19:48:47 【问题描述】:我正在尝试从 BI Publisher 调用存储过程,并且需要一些帮助来实现此目的。
这是我所拥有的: 在我的数据模型中,我有以下代码:
DECLARE
type refcursor is REF CURSOR;
xdo_cursor refcursor;
BEGIN
OPEN :xdo_cursor FOR
SELECT IPVOWN.F1(5) FROM DUAL;
COMMIT;
END;
SQL 类型 = 非标准 SQL 当您从 xdo_cursor 中删除“:”时,可以在 SQL Developer 中运行此代码,但在 BI 中需要“:”。我在日志文件中收到以下错误:
<txt>java.sql.SQLException: ORA-06550: line 2, column 22:
PLS-00103: Encountered the symbol "." when expecting one of the following:
* & = - + ; < / > at in is mod remainder not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 likec between || multiset member submultiset
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:462)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:405)
提前致谢。
【问题讨论】:
【参考方案1】:以下是有关如何从 BI Publisher 调用函数的步骤/文档:
1) 确保您使用的是 SYS_REFCURSOR。
2) 在 DB 中创建如下函数:
CREATE OR REPLACE FUNCTION FUNC1 (P1 VARCHAR2) RETURN SYS_REFCURSOR IS
XDO_CURSOR SYS_REFCURSOR;
BEGIN
IF P1 = 'USA' THEN
OPEN XDO_CURSOR FOR
'SELECT TO_CHAR(SYSDATE,''MM-DD-YYYY'') AS CURRENT_DATE, X.STATE FROM schemaName.XX1 X WHERE X.ID IN (100,200,400)';
RETURN XDO_CURSOR;
ELSE
OPEN XDO_CURSOR FOR
'SELECT TO_CHAR(SYSDATE,''MM-DD-YYYY'') AS CURRENT_DATE, X.STATE FROM schemaName.XX1 X WHERE X.ID IN (300,500,600)';
RETURN XDO_CURSOR;
END IF ;
END FUNC1;
3) 以 System 身份登录并授予 BI 用户执行权限
GRANT EXECUTE ON schemaName.FUNC1 TO BI_User;
在 BI Publisher 中的数据集中 - 您可以执行以下操作来调用函数:确保 SQL 的类型是“过程调用”
DECLARE
type refcursor is REF CURSOR;
xdo_cursor refcursor;
BEGIN
:xdo_cursor := SchemaName.func1(:P1);
END;
有关更多信息,您可以使用以下链接: https://community.oracle.com/thread/888365
【讨论】:
以上是关于如何从 BI Publisher 调用存储过程?的主要内容,如果未能解决你的问题,请参考以下文章
使用 ReportRawData 调用 BI Publisher Web 服务
如何更改 Oracle BI Publisher 中的日期格式?