Не удается вызвать хранимую процедуру 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;
Обратите внимание на сообщение об ошибке "Нет процедуры":).