Довольно много ошибок.
- вам не нужно
DECLARE
в названной процедуре PL / SQL - имена параметров должны отличаться от имен столбцов, так что вы былучше использовать - например -
p_area in nvarchar2, p_dateofvote in date
- , если вы выберете 3 столбца, вы должны поместить их
INTO
3 переменных - вы объявили только одну, поэтому либо объявите еще две, либо удалите AREA
и DATEOFOTE
из SELECT
- для чего используются эти параметры?Обычно, как часть предложения
WHERE
- что не так в вашем коде - обратите внимание на количество строк, возвращаемых оператором
SELECT
.Если вы выбираете скалярную переменную, убедитесь, что она возвращает только одну строку - , что вы будете делать с переменной
TEST
, как только получите ее значение?В настоящее время, ничего - у вас есть
END
, что является излишком.
Поэтому рассмотрим что-то вроде этого, которое должно компилироваться хотя бы (в зависимостив описании таблицы):
SQL> create table voting (area nvarchar2(10),
2 dateofvote date,
3 remainvotes nvarchar2(10),
4 leavevotes nvarchar2(10));
Table created.
SQL> create or replace procedure
2 sp_equalvote(p_area in nvarchar2, p_dateofvote in date)
3 is
4 test nvarchar2(255);
5 begin
6 select
7 case when remainvotes = leavevotes then remainvotes end
8 into test
9 from voting
10 where remainvotes = leavevotes
11 and area = p_area
12 and dateofvote = p_dateofvote;
13 end;
14 /
Procedure created.
SQL>
[EDIT]
После прочтения комментария, возможно, вы предпочтете использовать функцию.
Некоторыевыборочные значения:
SQL> insert into voting values (1, date '2019-02-20', 100, 15);
1 row created.
SQL> insert into voting values (1, date '2019-03-10', 300, 300);
1 row created.
Функция:
SQL> create or replace function
2 sp_equalvote(p_area in nvarchar2, p_dateofvote in date)
3 return nvarchar2
4 is
5 test nvarchar2(255);
6 begin
7 select
8 case when remainvotes = leavevotes then 'draw'
9 else 'not equal'
10 end
11 into test
12 from voting
13 where area = p_area
14 and dateofvote = p_dateofvote;
15
16 return test;
17 end;
18 /
Function created.
SQL>
Проверка:
SQL> select * From voting;
AREA DATEOFVOTE REMAINVOTE LEAVEVOTES
---------- ---------- ---------- ----------
1 20.02.2019 100 15
1 10.03.2019 300 300
SQL> select sp_equalvote(1, date '2019-02-20') res from dual;
RES
--------------------
not equal
SQL> select sp_equalvote(1, date '2019-03-10') res from dual;
RES
--------------------
draw
SQL>