首页 > 解决方案 > 函数在 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;

标签: oracleplsqlpowerbi

解决方案


您混合了分隔符;/.

清理它并在后面的末尾添加一个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 中使用分号和斜杠?


推荐阅读