2016-10-25 4 views
-2

が含まれている場合:これを実行すると文がSELECTなステートメント

create or replace FUNCTION GET_FUNCTION(STATUS_ID IN VARCHAR2) 
    RETURN VARCHAR2 
    IS STATUS_NAME VARCHAR2(255); 
    BEGIN 
    IF NVL(STATUS_ID) THEN 
      STATUS_NAME:=''; 
    ELSIF STATUS_ID LIKE '0' THEN 
      STATUS_NAME:='UNASSIGNED' 
    ELSE 
      SELECT TABLE_A.NAME INTO STATUS_NAME FROM TABLE_A where 
    TABLE_A.ID=STATUS_ID; 
    END IF; 

    RETURN(STATUS_NAME); 
    end; 

を私は次のエラーを取得する:

Error(9,4): PLS-00103: Encountered the symbol "ELSE" when expecting one of the following:  
* & = - + ; </> at in is mod remainder not rem <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset member submultiset 
The symbol ";" was substituted for "ELSE" to continue. 

問題は何ですか?あなたは(あなたのコード内の8行目 - 私はコメントを追加しました)を実行するために各ステートメントの後にセミコロンを追加する必要が

+0

これには「CASEWHEN」を使用できます。 –

+0

無関係ですが、 'STATUS_ID LIKE '0''は意味をなさない。それは 'STATUS_ID = '0'と同じです –

+0

私はSQLに新しいです – Saurabh

答えて

0
CREATE OR REPLACE FUNCTION GET_FUNCTION(STATUS_ID IN VARCHAR2) 
RETURN VARCHAR2 
IS STATUS_NAME VARCHAR2(255); 
BEGIN 
IF NVL(STATUS_ID) THEN 
     STATUS_NAME := ''; 
ELSIF STATUS_ID = '0' THEN 
     STATUS_NAME := 'UNASSIGNED'; 
ELSE 
     SELECT TABLE_A.NAME INTO STATUS_NAME 
     FROM TABLE_A 
     WHERE TABLE_A.ID = STATUS_ID; 
END IF; 

RETURN STATUS_NAME; 
END; 
0

create or replace FUNCTION GET_FUNCTION(STATUS_ID IN VARCHAR2) 
RETURN VARCHAR2 
IS STATUS_NAME VARCHAR2(255); 
BEGIN 
IF NVL(STATUS_ID) THEN 
     STATUS_NAME:=''; 
ELSIF STATUS_ID LIKE '0' THEN 
     STATUS_NAME:='UNASSIGNED'; /* HERE HAS TO BE A SEMICOLON TOO */ 
ELSE 
     SELECT TABLE_A.NAME INTO STATUS_NAME FROM TABLE_A where 
TABLE_A.ID=STATUS_ID; 
END IF; 

RETURN(STATUS_NAME); 
end; 
0

私はそれが1だと思うが

少しbeterです
CREATE OR REPLACE FUNCTION GET_FUNCTION(STATUS_ID IN VARCHAR2) 
RETURN VARCHAR2 
IS 
    cursor c_tab (B_STATUS_ID IN TABLE_A.ID%TYPE) 
    is 
    SELECT TABLE_A.NAME 
    FROM TABLE_A 
    WHERE TABLE_A.ID = B_STATUS_ID; 

    STATUS_NAME VARCHAR2(255); 
BEGIN 
IF NVL(STATUS_ID, -1) = -1 THEN 
-- IF STATUS_ID IS NULL THEN ==> This one is also possible! 
     STATUS_NAME := ''; 
ELSIF STATUS_ID = '0' THEN 
     STATUS_NAME := 'UNASSIGNED'; 
ELSE 
     OPEN C_TAB (STATUS_ID); 
     FETCH C_TAB INTO STATUS_NAME; 
     CLOSE C_TAB; 
END IF; 

RETURN STATUS_NAME; 
END; 
関連する問題