Не удается вызвать хранимую процедуру oracle

Может быть, слишком простой вопрос спросить, но мне нужна помощь.

Я создаю хранимую процедуру в 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" не является процедурой или является undefined
PL/SQL: выражение игнорируется

Оператор SELECT внутри обоих работает отлично, если он выполняется напрямую.

Я что-то делаю неправильно?

Ответ 1

Если вы хотите выполнить функцию, вам нужно собрать возвращаемое значение в переменную.

Итак, вам нужно определить переменную и функцию execute, чтобы вернуться в переменную ниже

и запустите его с помощью параметра выполнить Script не параметр Запустить.

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;

Ответ 2

Я считаю, что самый простой способ вызвать функцию - это просто выбрать функцию из двойного eg -

select check_login('admin', 'admin') from dual;

Обратите внимание на сообщение об ошибке "Нет процедуры":).