web-dev-qa-db-ja.com

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'はプロシージャではないか、定義されていません
PL/SQL:ステートメントが無視されました

両方の内部のSELECTステートメントは、直接実行すると正常に機能します。

私は何か間違ったことをしていますか?

16
Kumar Kush

関数を実行する場合は、戻り値を変数に収集する必要があります。

したがって、以下のように変数を定義し、関数を実行して変数に戻る必要があります

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;
25
josephj1989

関数を呼び出す最も簡単な方法は、デュアル関数から関数を選択することです-

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

「いいえ手順 ':)」というエラーメッセージが表示されます。