0

現在、従業員のステータスを確認するためにこのコードに取り組んでおり、新しいログイン機能を作成したいと考えています。

create or replace FUNCTION get_status_by_employee_id
(   
p_employee_id       NUMBER 

) RETURN CHAR
AS
  v_status  employee.status%TYPE;
BEGIN
    SELECT status
    INTO   v_status
    FROM   employee
    WHERE  employee_id = p_employee_id;

    return v_status; 

EXCEPTION 
    WHEN NO_DATA_FOUND THEN
    return 'N';

END get_status_by_employee_id;

従業員ログインの新機能:

CREATE OR REPLACE FUNCTION employee_login
(   
p_employee_id       NUMBER,
p_password      VARCHAR2

) RETURN CHAR
AS
BEGIN
  SELECT employee_id, password
  FROM employee
  WHERE employee_id = p_employee_id;

EXCEPTION 
WHEN NO_DATA_FOUND THEN
return 'N';

END employee_login;

テストの例: SELECT employee_login(2002, 'frw234r')

Employee_Login(2002, 'frw234r')
-------------------------------------
F

上記の最初の関数のように、employee_id がテーブルにない場合は「N」を返します。employee_id の値が employee テーブルにあるが、p_password と一致しない場合は、'F' を返したいと思います。最後に、employee_id と p_password が一致する場合は、'Y' を返します。これらの最後の 2 つの戻り値をコードに実装する方法がわかりません。どんな助けでも素晴らしいでしょう!

4

1 に答える 1

1

次の関数は、基準を満たす必要があります。

CREATE OR REPLACE FUNCTION employee_login(p_employee_id NUMBER,
                                          p_password  VARCHAR2
) RETURN CHAR
IS
   l_password VARCHAR2(20);
BEGIN
   SELECT password
     INTO l_password
     FROM employee
    WHERE employee_id = p_employee_id;

   IF l_password = p_password THEN
      return 'Y';
   END IF;

   return 'F';

   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         return 'N';

END employee_login;

基本的に、NO_DATA_FOUND 例外がスローされない場合は、渡されたパスワードとテーブルから取得したパスワードを比較します。一致する場合は、'Y' を返します。それ以外の場合は、従業員が見つかったことを示すために 'F' を返しますが、パスワードは一致しません。

于 2013-05-23T20:22:40.753 に答える