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

标签 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' 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/

相关文章:

mysql - 设置变量结果,来自查询

java - 通过使用 LIKE 的查询来查询左大括号

javascript - Typescript - 全局函数?

mysql - 尝试操作存储过程中的数据时显示空值

MySQL:如果存储过程中的选定字段具有 NULL 值,我想返回 N/A 作为值

JavaScript 带参数函数的问题

sql - 100 个逗号分隔的随机计数器位置值进行求和并显示最近 60 分钟的统计数据

mysql - 在通用 SQL 中同时检索(选择)或创建(插入)新行而不会发生冲突

java - 使用多个输出参数调用 Oracle StoredProcedure

C 错误 : conflicting types for function and previous declaration was here (not duplicate)