2017-10-11 14 views
0

に機能選択欄、コードSQL:私はそれをここで私は私はそれを行うことができますどのように二つの変数に2つの列を選択する必要があり、変数

CREATE OR REPLACE FUNCTION checkUser(pUserName VARCHAR2, pCountry VARCHAR2) 
RETURN NUMBER 

IS 
    vUsername VARCHAR2(100); 
    vCountry VARCHAR2(100); 

BEGIN 
    SELECT Person.Username INTO vUsername 
    FROM Person 
    WHERE Person.Username = pUserName; 
    EXCEPTION WHEN NO_DATA_FOUND THEN 
     vUsername := NULL; 

    SELECT Person.Country INTO vCountry 
    FROM Person 
    WHERE Person.Country = pCountry; 
    EXCEPTION WHEN NO_DATA_FOUND THEN 
     vCountry := NULL; 

    IF vUsername IS NULL OR vCountry IS NULL THEN 
     RETURN False; 
    ELSE 
     RETURN True; 
    END IF; 
END checkUser; 

を行うことができますか?私はSQLで新しいです。

+0

あなたのご質問はありますか?あなたはどんなエラーを出していますか? – Ravi

+0

VARCHAR2に国のリストを格納しようとするため、2人の国が同じ国(ORA-01422)の場合は問題はありませんか。とにかくあなたの機能は何をするはずですか? – Dessma

答えて

1

複数の列を選択すると、はるかに複雑あなたは、現時点では何をしているかよりもありません:

SELECT p.Username,p.Country INTO vUsername, vCountry 
    FROM Person p 
    WHERE p.Username = pUserName AND p.Country = pCountry; 

ちょうど SELECT後と INTO後に「」で列を分けます。

トピックがオフの場合、引数のユーザー名と国に対応する複数のレコードがないことを確認する必要があります。そうしないと、スカラー変数にデータのリストを格納しようとするとエラーが発生します。

0

あなたがしようとしていることに基づいて、次のコードはあなたに望ましい結果をもたらします。文字列'True'または'False'を返す必要がある場合は、使用しているRETURN NUMBERが正しくないことに注意してください。

CREATE OR replace FUNCTION Checkuser(pusername VARCHAR2, 
            pcountry VARCHAR2) 
RETURN VARCHAR2 
IS 
    v_count NUMBER(10); 
BEGIN 
    SELECT Count(1) 
    INTO v_count 
    FROM person p 
    WHERE p.username = pusername 
      AND p.country = pcountry; 

    IF v_count = 0 THEN 
     RETURN 'False'; 
    ELSE 
     RETURN 'True'; 
    END IF; 
END checkuser; 
関連する問題