Oracle 如何使用plsql返回多个列
我有一个受SAR保护的oracle数据库,我需要从中向PowerBI公开一个表 我不熟悉PLSQL 我已经成功地向PowerBI公开了表中的一列 需要在两个方面提供帮助 1) 我需要你们的帮助从表中返回选择性列Oracle 如何使用plsql返回多个列,oracle,plsql,powerbi,pipeline,sar,Oracle,Plsql,Powerbi,Pipeline,Sar,我有一个受SAR保护的oracle数据库,我需要从中向PowerBI公开一个表 我不熟悉PLSQL 我已经成功地向PowerBI公开了表中的一列 需要在两个方面提供帮助 1) 我需要你们的帮助从表中返回选择性列 DROP TYPE testarr; CREATE OR REPLACE TYPE testarr IS TABLE OF VARCHAR2(70); / GRANT EXECUTE ON testarr TO public; DROP FUNCTION TestPowerBI CR
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;
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;
您可以创建一个函数
假设这是你的桌子
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;
/
以表的形式查询函数的输出
select * from TABLE(TestPowerBI);
ID NAME
---------- ----------
1 Knayak
PLSQL是一种编程语言。您需要的是sql查询,而不是函数。PowerBi UI不允许我们获取受SAR保护的数据。这是一个变通办法。有没有一种方法可以使用PLSQL同时返回两列?让函数返回游标而不是表类型。请参见此问题的答案:顺便问一下,什么是SAR保护数据?我做了一次网络搜索,首字母缩略词有很多定义。现在PowerBi状态无法从非嵌套表项访问行。Sar只是一个安全访问角色,在这里内部指定用于访问表,这在PLSQL中非常有效。但是PowerBI返回了一个“Sql命令未正确结束”错误