【问题标题】:How to execute oracle function in oracle apex onlineoracle apex在线执行oracle函数的方法
【发布时间】:2019-12-10 19:51:36
【问题描述】:

我在 oracle apex 中有返回 true 或 false 的函数。当我使用 oracle apex 的 sqlcommand 函数时,我无法执行该函数

function authenticateUser(p_username in varchar2 ,p_password in varchar2 )
        return boolean 
        is 
         p_user Users.USERNAME%type;
        begin
             select USERNAME into p_user from Users  where   upper(USERNAME)=upper(p_username) and  upper(PASSWORD) = upper(p_password);
                 return true;
             exception
                when NO_DATA_FOUND then 
                return false;
        end authenticateUser;

当我跑步时

begin

PKG_AUTHORIZATION.authenticateUser(:p_username,:p_password);
end;

错误显示为

ORA-06550: line 3, column 1:
PLS-00221: 'AUTHENTICATEUSER' is not a procedure or is undefined
ORA-06550: line 3, column 1:
PL/SQL: Statement ignored
ORA-06512: at "SYS.DBMS_SQL", line 1721
1. begin
2. PKG_AUTHORIZATION.authenticateUser(:p_username,:p_password);
3. end;

当我写作时

select PKG_AUTHORIZATION.authenticateUser(:p_username,:p_password) from dual;

它会抛出错误

ORA-00902: invalid datatype

【问题讨论】:

  • 你不能从函数中选择结果,因为它返回一个布尔值,它不是 SQL 知道的数据类型。您的功能是否在包规范中定义?您是否需要使用架构限定名称?您是否有权运行该功能?我们看不到这个函数是如何在包中定义的或者你在运行它的人,所以答案很棘手。

标签: oracle oracle-apex


【解决方案1】:

我想这个函数存在于包中,对吧?

由于它返回的是布尔值,所以不能直接从SQL中使用,而是PL/SQL,比如:

declare
  l_val varchar2(20);
begin
  l_val := case when PKG_AUTHORIZATION.authenticateUser(:p_username,:p_password) then 'true'
                else 'false'
           end;
end;

但是,您不必担心。当您使用 Oracle Apex 标记标记问题时,我假设您使用此功能进行自己的身份验证(而不是内置的)。如果是这样,您只需 name 应该完成这项工作的函数并将其名称放入“身份验证函数名称”项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    相关资源
    最近更新 更多