问题可能过于简单,但我确实需要帮助。
我在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;
我也试过这个:
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;
解析两者都不会给出任何错误消息。我使用以下语法来调用它们:
BEGIN
check_login('admin', 'admin');
END;
和
EXECUTE check_login('admin', 'admin');
我收到此错误消息....
PLS-00221:'CHECK_LOGIN'不是程序或未定义的 PL / SQL:忽略语句
如果直接运行,两者中的SELECT语句都可以正常工作。
我做错了吗?
答案 0 :(得分:20)
如果要执行函数,则必须将返回值收集到变量中。
所以你需要定义一个变量并执行函数以返回变量,如下所示
并使用运行脚本选项而不是运行语句选项运行它。
variable ret varchar2(20);
execute :ret:=check_login(dd,dd);
select :ret from dual
或者如果你是从plsql
进行的declare v_ret varchar2(100);
begin
v_ret:=check_login(a,b);
end;
答案 1 :(得分:6)
我发现调用函数的最简单方法就是从双重选择函数 -
select check_login('admin', 'admin') from dual;
请注意错误消息“No procedure ”:)。