Как мне вернуть несколько столбцов, используя plsql - PullRequest
0 голосов
/ 07 июня 2018

У меня есть защищенная SAR база данных оракула, из которой мне нужно предоставить таблицу PowerBI.

Я не знаком с PLSQL.

Мне удалось открыть столбец таблицыв PowerBI.

Требуется помощь в 2 областях

1) Мне, ребята, нужна помощь для возвращения выборочных столбцов из таблицы

2) Мне, ребята, нужна помощь, чтобы вернуть всестолбцы из таблицы

DROP TYPE testarr;
CREATE OR REPLACE TYPE testarr IS TABLE OF VARCHAR2(70);

/
GRANT EXECUTE ON testarr TO public;
DROP FUNCTION TestPowerBI

CREATE OR REPLACE FUNCTION TestPowerBI
RETURN testarr AUTHID CURRENT_USER AS
o_recorset SYS_REFCURSOR;
arr testarr := testarr();
pragma autonomous_transaction;

BEGIN
     sar.pk_sar_enable_roles.............
     commit;
     OPEN o_recordset FOR
          SELECT NAME FROM vw_people;
     FETCH o_recordset BULK COLLECT INTO arr;
     CLOSE o_recordset;
     RETURN arr;

END TestPowerBI

Grant execute on TestPowerBi to public;

1 Ответ

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

Вы можете создать функцию PIPELINED TABLE .

допустим, это ваша таблица.

create table vw_people ( ID INTEGER, NAME VARCHAR2(10));
INSERT INTO vw_people(id,name) VALUES ( 1,'Knayak');
commit;

создайте объект и коллекцию объектов типа

CREATE OR REPLACE TYPE vw_people_typ AS OBJECT( ID INTEGER,NAME VARCHAR2(10)); 
CREATE OR REPLACE TYPE vw_people_tab AS TABLE OF vw_people_typ; 

Это ваша функция

CREATE OR REPLACE FUNCTION testpowerbi RETURN vw_people_tab
    PIPELINED
    AUTHID current_user
AS
    vwt   vw_people_tab;
    PRAGMA autonomous_transaction;
BEGIN
     sar.pk_sar_enable_roles;
     commit;
    SELECT
        vw_people_typ(id,name)
    BULK COLLECT
    INTO vwt
    FROM
        vw_people;

    FOR i IN 1..vwt.count LOOP
        PIPE ROW ( vw_people_typ(vwt(i).id,vwt(i).name) );
    END LOOP;
END testpowerbi;
/

Запросить вывод функции как TABLE

select * from TABLE(TestPowerBI);

        ID NAME      
---------- ----------
         1 Knayak    
...