ORA-06550: строка 1, столбец 7: PLS-00306: неверный номер или типы аргументов при вызове 'TEST' ORA-06550: строка 1, столбец 7: PL / SQL: оператор игнорируется

вы выполняете сравнения строк в каждом из ваших «между». Каждое число, начинающееся с 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, ...), а не тремя разделенными столбцы.

0
задан Barbaros Özhan 26 February 2019 в 10:51
поделиться

2 ответа

Ваша процедура test имеет 2 входных аргумента. Один имеет тип IN, который предполагается использовать с процедурой, а другой параметр supplier имеет тип OUT, что означает, что этот параметр должен содержать значение, которое возвращает Procedure.

Как объяснил @Barbaros, если вы хотите выполнить процедуру через командную строку SQL, вы можете выполнить следующие действия.

Однако вторым способом, который вы показали, было использование PLSQL Block.

begin

выполнить тест (2279,: supplierid);

dbms_output.enable;

dbms_output.put_line (поставщик); end;

В приведенном выше примере вызова вы должны заметить, что ключевое слово 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;
0
ответ дан XING 26 February 2019 в 10:51
поделиться

Кажется, вы запутались между supplierid и supplier. Вам нужно определить переменную для supplier, чтобы напечатать строку вывода, и, скорее всего, вы определили переменную командной строки supplierid, которая имеет числовой тип.

Итак, используйте ниже:

SQL> set serveroutput on;
SQL> var supplier varchar2;
SQL> execute test(2279, :supplier);
supplier
---------
Afzal -- as an example name
0
ответ дан Barbaros Özhan 26 February 2019 в 10:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: