【问题标题】:Please solve Oracle stored procedure error请解决Oracle存储过程错误
【发布时间】:2012-01-28 22:41:45
【问题描述】:

我正在学习 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”时 期待以下情况之一:如果

【问题讨论】:

    标签: oracle stored-procedures oracle11g


    【解决方案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;
      

      【讨论】:

      • v_col1 VI_Sale.col1%type;这意味着选择 1 个字段还是所有字段?如果我想选择 1 个或多个字段,请告诉我如何选择。
      • 这只是选择一列,对于两个你做'select col1,col2 into v_col1,v_col2'等。'v_col1 VI_Sale.col1%type;'行只是将变量定义为与表的 col1 列相同的类型。
      • 非常感谢您的建议
      猜你喜欢
      • 1970-01-01
      • 2015-05-02
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多