вы выполняете сравнения строк в каждом из ваших «между». Каждое число, начинающееся с 1, 2 или 3, независимо от того, что следует за ним, то есть 21 или 26 или 31, все они ниже 7, если вы смотрите на них как строки. От 1 до 30 работает, потому что вы только оставляете 31 позади, и 30 & lt; 31 как String.
Сначала выполните конкатенацию, а затем между:
WHERE concat(month,' ',day,',',year)
BETWEEN concat(cbosmonth.Text,' ', cbosday.Text,' ',cbosyear.Text)
AND concat(cboemonth.Text,' ', cboeday.Text,' ',cboeyear.Text)
(проверьте правильный синтаксис, я просто скопирую вставку из вашего вопроса, не пробовал его)
Кстати, если у вас нет причин, вы, вероятно, должны хранить всю дату в одном столбце с правильным временем данных (datetime, timestamp, ...), а не тремя разделенными столбцы.
Ваша процедура test
имеет 2 входных аргумента. Один имеет тип IN, который предполагается использовать с процедурой, а другой параметр supplier
имеет тип OUT
, что означает, что этот параметр должен содержать значение, которое возвращает Procedure
.
Как объяснил @Barbaros, если вы хотите выполнить процедуру через командную строку SQL, вы можете выполнить следующие действия.
Однако вторым способом, который вы показали, было использование PLSQL Block
.
begin
выполнить тест (2279,: supplierid);
dbms_output.enable;
dbms_output.put_line (поставщик); end;
blockquote>В приведенном выше примере вызова вы должны заметить, что ключевое слово
Execute
используется только при использовании командной строкиSQL
. При использовании блока PLSQL вы можете напрямую вызывать процедуру по ее имени, как показано ниже. Также обратите внимание, что если у вас есть параметрOUT
, вы должны передать параметрOUT
вProcedure
, посколькуProcedure
ожидает 2 аргумента. Смотри ниже демо.declare var varchar2(100); begin test( supplierid => 2279, supplier =>var); dbms_output.enable; dbms_output.put_line(var); End;
Кажется, вы запутались между supplierid
и supplier
. Вам нужно определить переменную для supplier
, чтобы напечатать строку вывода, и, скорее всего, вы определили переменную командной строки supplierid
, которая имеет числовой тип.
Итак, используйте ниже:
SQL> set serveroutput on;
SQL> var supplier varchar2;
SQL> execute test(2279, :supplier);
supplier
---------
Afzal -- as an example name