2011-12-28 67 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