0

我正在尝试从 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:

 * &amp; = - + ; &lt; / > at in is mod remainder not rem
 &lt;an exponent (**)> &lt;> or != or ~= >= &lt;= &lt;> 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)

提前致谢。

4

1 回答 1

1

以下是有关如何从 BI Publisher 调用函数的步骤/文档:

1) 确保您使用的是 SYS_REFCURSOR。

2)在数据库中创建如下函数:

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

于 2015-10-22T21:52:06.090 回答