Пожалуйста, устраните ошибку хранимой процедуры Oracle - PullRequest
0 голосов
/ 28 декабря 2011

Я учу оракула и начинаю.Пожалуйста, устраните мою следующую ошибку.

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" при ожидании одного из следующих действий: if

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

Измените каждый 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;
1 голос
/ 28 декабря 2011

Вы используете ELSE IF вместо ELSEFIF (без пробела), поэтому вы создаете дополнительные if, которые вы должны закрыть.

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;
...