2015-10-22 1 views
0

Я пытаюсь вызвать хранимую процедуру из BI Publisher и нуждаюсь в некоторой помощи для достижения этой цели.Как вызвать хранимую процедуру из 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 Выполнение этого кода работает в SQL Developer, когда вы удалите ":" from xdo_cursor, но в 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) 

благодарит заранее.

ответ

0

Ниже приведены шаги/документация о том, как вызвать функцию из 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) Войти в систему и гранта выполнить для пользователя BI

GRANT EXECUTE ON schemaName.FUNC1 TO BI_User; 

В наборе данных в BI Publisher - You может вызвать следующее: Убедитесь, что тип SQL «Вызов процедур»

DECLARE 
    type refcursor is REF CURSOR; 
    xdo_cursor refcursor; 
    BEGIN 
    :xdo_cursor := SchemaName.func1(:P1); 
    END; 

Для получения дополнительной информации вы n используйте приведенную ниже ссылку: https://community.oracle.com/thread/888365