kus*_*tus 16 oracle stored-procedures function oracle10g
问题可能过于简单,但我确实需要帮助.
我在Oracle 10g中创建了一个存储过程,但我无法调用它.我正在使用SQL Developer来管理数据库.
CREATE OR REPLACE
FUNCTION check_login
(username IN VARCHAR2, pwd IN VARCHAR2)
RETURN VARCHAR2
IS
isUserValid INTEGER;
BEGIN
SELECT Count(*) INTO isUserValid
FROM users
WHERE Username = username AND PASS_WORD = pwd;
return isUserValid;
END;
Run Code Online (Sandbox Code Playgroud)
我也尝试了这个:
CREATE OR REPLACE
PROCEDURE check_login
(username IN VARCHAR2, pwd IN VARCHAR2, RESULT OUT INTEGER)
IS
isUserValid INTEGER;
BEGIN
SELECT Count(*) INTO isUserValid
FROM users
WHERE Username = username AND PASS_WORD = pwd;
RESULT := isUserValid;
END;
Run Code Online (Sandbox Code Playgroud)
解析两者都不会给出任何错误消息.我使用以下语法来调用它们:
BEGIN
check_login('admin', 'admin');
END;
Run Code Online (Sandbox Code Playgroud)
和
EXECUTE check_login('admin', 'admin');
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息....
PLS-00221:'CHECK_LOGIN'不是过程或未定义
PL/SQL:语句被忽略
如果直接运行,两者中的SELECT语句都可以正常工作.
难道我做错了什么?
jos*_*989 24
如果要执行函数,则必须将返回值收集到变量中.
因此,您需要定义一个变量并执行函数以返回到变量,如下所示
并使用运行脚本选项而不是运行语句选项运行它.
variable ret varchar2(20);
execute :ret:=check_login(dd,dd);
select :ret from dual
Run Code Online (Sandbox Code Playgroud)
或者如果你是从plsql那里做的
declare v_ret varchar2(100);
begin
v_ret:=check_login(a,b);
end;
Run Code Online (Sandbox Code Playgroud)
小智 7
我发现调用函数最简单的方法就是从双重选择函数 -
select check_login('admin', 'admin') from dual;
Run Code Online (Sandbox Code Playgroud)
注意错误消息说"没有程序 ":).