无法调用oracle存储过程和函数

时间:2011-10-12 07:08:06

标签: oracle function stored-procedures 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;

我也试过这个:

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语句都可以正常工作。

我做错了吗?

2 个答案:

答案 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 ”:)。