gpt4 book ai didi

oracle - 如何使用 plsql 返回多列

转载 作者:行者123 更新时间:2023-12-05 03:05:32 24 4
gpt4 key购买 nike

我有一个受 SAR 保护的 oracle 数据库,我需要从中向 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;

最佳答案

您可以创建一个 PIPELINED TABLE功能。

假设这是您的 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

关于oracle - 如何使用 plsql 返回多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50732074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com