2015-04-08 28 views
0

嗨我很開心gtrouble運行此查詢。我正在嘗試獲取輸入參數,並根據該值在查詢中使用它。在Oracle sql中使用declare和if語句?

我得到的錯誤是:

**Error(26,3): PLS-00103: Encountered the symbol "IF" when expecting one of the following: begin function pragma procedure subtype type <an identifier> <a double-quoted delimited-identifier> current cursor delete exists prior **

create or replace 
PROCEDURE GET_STATES (
    i_id IN NUMBER, 
    o_result OUT SYS_REFCURSOR, 

IS 

DECLARE country VARCHAR2 = ''; 

BEGIN 
    o_sqlmsg := 'SUCCESS'; 
    o_sqlcode := 0; 

    IF i_id == 284 
    THEN country := 'US'; 
    ELSE country := 'CA'; 
    END IF; 
    OPEN o_result FOR 
    Select cnint as Id, cnabbv as Code, rtrim(cnname) as Name, i_id as CId 
    from country 
    order by cnname; 
+2

在'o_result OUT SYS_REFCURSOR)'這裏的一個括號'''',當用於聲明過程/函數時,不需要'DECLARE'關鍵字! –

+1

SQL(和PL/SQL)中的等號運算符是'='。不是'=='。你也需要在變量聲明中使用一個合適的賦值運算符':='。 –

+1

爲什麼要在設置國家的價值時不打算在哪裏使用呢?好主意不要用與表名相同的名稱命名變量,更好的想法是告訴Oracle VARCHAR2將會有多大......與DECLARE相同v_country VARCHAR2(2); – kevinsky

回答

1

你的程序不應該有它的一個DECLARE關鍵字和丟失其最後的最後聲明,與其他一些次要的問題語法沿。改變它看起來像

create or replace 
PROCEDURE GET_STATES (i_id IN NUMBER, 
         o_result OUT SYS_REFCURSOR) 
IS 
    country VARCHAR2; 
BEGIN 
    o_sqlmsg := 'SUCCESS'; 
    o_sqlcode := 0; 

    IF i_id = 284 
    THEN country := 'US'; 
    ELSE country := 'CA'; 
    END IF; 

    OPEN o_result FOR 
    Select cnint as Id, 
      cnabbv as Code, 
      rtrim(cnname) as Name, 
      i_id as CId 
    from country 
    order by cnname; 
END GET_STATES; 

祝你好運。