PLSQL получить все данные таблицы - PullRequest
0 голосов
/ 08 июня 2018

У меня есть функция в PLSQL, и я пытаюсь вызвать ее из PowerBI, которую я наконец-то заставил работать.

В настоящее время, чтобы вернуть столбцы таблиц, мне нужно вручную указать типы.Есть ли способ просто отредактировать этот код, чтобы он возвращал все столбцы любой данной таблицы?

Это означает, что с учетом этого сценария мне нужно только изменить имя таблицы в сценарии, и он должен дать мне вседанные.

Я должен использовать PLSQL для этого, так как есть некоторая защита аутентификации для запросов к таблицам, которую я не могу просто запросить из PowerBI.

Drop Type VW_PEOPLE_TABLE;
Drop Type VW_PEOPLE_TYPE;
Drop Function TESTPOWERBI;
Drop Public Synonym PBI;

CREATE TYPE VW_PEOPLE_TYPE AS Object
{
     Name VarChar2(70).
     ALIAS VarChar2(90)
};
/
Create Type VW_PEOPLE_TABLE as TABLE OF VW_PEOPLE_TYPE;
/
Grant execute on VW_PEOPLE_TABLE TO public;

Create Function TESTPOWERBI
     Return VW_PEOPLE_TABLE Pipelined AUTHID current_user AS VWT VW_PEOPLE_TABLE;
     Pragma AUTONOMOUS_TRANSACTION;
Begin
    Select VW_PEOPLE_TYPE(NAME,ALIAS) 
    Bulk COLLECT INTO VWT 
    FROM mytable;

    FOR I IN 1 .. VWT.count 
    LOOP
        PIPE ROW(VW_PEOPLE_TYPE(VWT(I).NAME, VWT(I).ALIAS));
    END LOOP;
END TESTPOWERBI;
/
create public synonym PBI for TESTPOWERBI;
Grant Execute on PBI to public;

1 Ответ

0 голосов
/ 08 июня 2018

РЕДАКТИРОВАТЬ : согласно этому powerBI публикация сообщества:

Вы должны быть в состоянии достигнуть этого, используя процедуру, подобную этой.

CREATE OR REPLACE PROCEDURE get_query_result (
    p_tab_name VARCHAR2,
    p_rc OUT SYS_REFCURSOR
) AS
BEGIN
    OPEN p_rc FOR 'select * FROM '
                || p_tab_name;
 END;
/

В среде Oracle, если вы используете Oracle 12c и выше, вы можете использовать DBMS_SQL.RETURN_RESULT с динамическим REFCURSOR.

CREATE OR REPLACE PROCEDURE get_query_result (
    p_tab_name VARCHAR2
) AS
    rc   SYS_REFCURSOR;
BEGIN
    OPEN rc FOR 'select * FROM '
                || p_tab_name;


    dbms_sql.return_result(rc);
END;
/

Получить результат запроса для любой таблицыиспользуя

EXEC get_query_result('EMPLOYEES');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...