2011-12-28 99 views
0

我正在學習oracle,我是初學者。請解決我的以下錯誤。請解決Oracle存儲過程錯誤

create or replace 
PROCEDURE SP_SALE_SELECT 
(para1 OUT NVARCHAR2 
, para2 OUT NVARCHAR2 
, action IN NVARCHAR2 
) AS 
BEGIN 
    IF action = 1 then 
    Select * From VI_Sale; 
    Else if action = 2 then 
    Select * From VI_Sale 
    WHERE SaleID = para1; 
    Else if action = 3 then 
    Select * From VI_Sale 
    Where CustomerID = para1; 
    Else if action = 4 then 
    Select * From VI_Sale 
    where SaleID = para1 and CustomerID = para2; 
End if; 
END SP_SALE_SELECT; 

錯誤(20,5):PLS-00103:出現符號 「SP_SALE_SELECT」 當 需要下列之一:如果

回答

1

您使用ELSE IF代替ELSEFIF(無空間),所以你正在創建你應該關閉的其他ifs。

create or replace 
PROCEDURE SP_SALE_SELECT 
(para1 OUT NVARCHAR2 
, para2 OUT NVARCHAR2 
, action IN NVARCHAR2 
) AS 
BEGIN 
    IF action = 1 THEN 
    Select * From VI_Sale; 
    ElSEIF action = 2 THEN 
    Select * From VI_Sale 
    WHERE SaleID = para1; 
    ElSEIF action = 3 THEN 
    Select * From VI_Sale 
    Where CustomerID = para1; 
    ELSEIF action = 4 then 
    Select * From VI_Sale 
    where SaleID = para1 and CustomerID = para2; 
End if; 
END; 
2

將每個Else if更改爲ELSIF。另外,你不能從PL/SQL塊的表中選擇*,你需要選擇一個變量。例如,

create or replace 
PROCEDURE SP_SALE_SELECT 
(para1 OUT NVARCHAR2 
, para2 OUT NVARCHAR2 
, action IN NVARCHAR2 
) AS 
v_col1 VI_Sale.col1%type; 
BEGIN 
    IF action = 1 then 
    Select col1 into v_col1 From VI_Sale; 
    Elsif action = 2 then 
    Select col1 into v_col1 From VI_Sale 
    WHERE SaleID = para1; 
    Elsif action = 3 then 
    Select col1 into v_col1 From VI_Sale 
    Where CustomerID = para1; 
    Elsif action = 4 then 
    Select col1 into v_col1 From VI_Sale 
    where SaleID = para1 and CustomerID = para2; 
End if; 
END SP_SALE_SELECT; 
+0

謝謝你約翰 – 2011-12-28 06:38:35

+0

v_col1 VI_Sale.col1%type; 這是說選擇1場還是所有場?如果我想選擇1個或多個字段,請告訴我如何選擇。 – 2011-12-28 07:47:10

+0

這只是選擇一列,對於你選擇'col1,col2到v_col1,v_col2'等等。'v_col1 VI_Sale.col1%type''行只是將變量定義爲與表格的col1列相同的類型。 – 2011-12-28 07:52:55