可能问得太简单了,但我确实需要帮助。
我正在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' is not a procedure or is undefined
PL/SQL: Statement ignored
如果直接运行,则两者中的SELECT语句都可以正常工作。
难道我做错了什么?
最佳答案
如果要执行功能,则必须将返回值收集到变量中。
因此,您需要定义一个变量并执行函数以返回到变量,如下所示
并使用运行脚本选项而不是运行语句选项运行它。
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;
关于oracle - 无法调用oracle存储过程和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7736447/