2017-10-11 84 views
0

我需要兩個變量來選擇兩列我怎麼能做到這一點,這裏的代碼SQL:功能選擇列到變量

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

很確定,如果兩個人擁有相同的國家(ORA-01422),您將會遇到問題,因爲您會嘗試將國家列表存儲在VARCHAR2中。你的功能應該做什麼? – 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;