oracle - 函数在 PL/SQL 中有效,但在 PowerBi 中无效
问题描述
当我调用该函数时,它在 SQL*Plus 中有效,但在 PowerBI 中无效。
我打开PowerBI>获取数据>Oracle>输入服务器名称>进入高级选项在下面输入sql
从表中选择*(TESTPOWERBI);
错误:我们在尝试连接时遇到错误。SQL 命令未正确结束。
有人有解决这个问题的经验吗?
DROP TYPE VW_PEOPLE_TABLE;
DROP TYPE VW_PEOPLE_TYPE;
CREATE OR REPLACE TYPE VW_PEOPLE_TYPE AS OBJECT(NAME VARCHAR2(70), ALIAS VARCHAR2(90));
/
CREATE OR REPLACE TYPE VW_PEOPLE_TABLE AS TABLE OF VW_PEOPLE_TYPEL
/
CREATE OR REPLACE 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 MYDATABASE;
FOR i in 1 .. VWT.COUNT
LOOP
PIPE ROW (VW_PEOPLE_TYPE(VWT(i).NAME, VWT(i).ALIAS));
END LOOP;
END TESTPOWERBI;
/
GRANT EXECUTE ON TESTPOWERBI TO PUBLIC;
解决方案
您混合了分隔符;
和/
.
清理它并在后面的末尾添加一个GRANT EXECUTE ON TESTPOWERBI TO PUBLIC
。
另外你有一个错字:for i in 1 .. vwt.count
只有两个点。
这应该有效:
DROP TYPE VW_PEOPLE_TABLE;
DROP TYPE VW_PEOPLE_TYPE;
CREATE OR REPLACE TYPE VW_PEOPLE_TYPE AS OBJECT
(
NAME VARCHAR2 (70),
ALIAS VARCHAR2 (90)
);
CREATE OR REPLACE TYPE VW_PEOPLE_TABLE AS TABLE OF VW_PEOPLE_TYPEL;
CREATE OR REPLACE 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 MYDATABASE;
FOR i IN 1 .. VWT.COUNT
LOOP
PIPE ROW (VW_PEOPLE_TYPE (VWT (i).NAME, VWT (i).ALIAS));
END LOOP;
END TESTPOWERBI;
/
GRANT EXECUTE ON TESTPOWERBI TO PUBLIC;
这里有一些关于分隔符的讨论: 我什么时候需要在 Oracle SQL 中使用分号和斜杠?
推荐阅读
- javascript - 如何知道 rxjs webSocket 中是否建立了连接?
- swift - 为什么我的@State 没有改变我的条件语句?
- python-3.x - Python3:如何检测 /dev/shm(或 ProcessPoolPexecutor)是否可以使用?
- c++ - 向量的复制构造函数
C++ - javascript - React-Native/Firestore - 按日期搜索
- c++ - 在OpenGL中掩盖地形表面的一个区域
- flutter - Flutter:如何让尾随图标随 largeTitle 移动?
- javascript - 使用 jsonpath 提取 json 中的元素值
- reference - 参考文献没有出现在我的 Latex 书的 PDF 文件中
- powershell - 如何在 PowerShell 中列出具有长路径名的特定扩展名的文件而无需等待数小时