質問が単純すぎるかもしれませんが、助けが必要です。
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ステートメントは、直接実行すると正常に機能します。
私は何か間違ったことをしていますか?
関数を実行する場合は、戻り値を変数に収集する必要があります。
したがって、以下のように変数を定義し、関数を実行して変数に戻る必要があります
Run Scriptオプションではなく、run 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;
関数を呼び出す最も簡単な方法は、デュアル関数から関数を選択することです-
select check_login('admin', 'admin') from dual;
「いいえ手順 ':)」というエラーメッセージが表示されます。