Ошибка неверного количества или типов аргументов при использовании dbms_output.put_line в Oracle PL / SQL - PullRequest
0 голосов
/ 16 декабря 2011

У меня проблема с командой dbms_output.put_line().

У меня есть переменная pres_name, и я хочу напечатать значение на экране. Поэтому я использую dbms_output.put_line(), но команда не принимает этот тип переменной, но все сайты, которые я нашел, используют ее как dbms_output.put_line(varchar variable). Но я получаю это предупреждение:

Фелер (15,5): пожалуйста, 00306: Фальше Анцаль или Типен фон Аргументен в Ауфруфе фон 'PUT'

На английском языке:

неверное количество или типы аргументов при вызове пут

Я использую Oracle sql developer.

код:

create or replace
procedure ex10_1
(
 pr_name varchar
)
as
cursor pres is select vice_pres_name from admin_pr_vp;
begin
  open pres;
  for pr_name in pres loop
    dbms_output.put_line(pr_name);
  end loop;
end;

пс: код еще не совершенен.

1 Ответ

5 голосов
/ 16 декабря 2011
<snip>
for pr_name in pres loop
    dbms_output.put_line(pr_name);
end loop;
<snip>

В PL / SQL курсор для цикла неявно объявляет переменную цикла как тип записи, соответствующий строке курсора. Итак, в цикле pr_name есть запись с одним полем vice_pres_name. Это поле имеет тип vice_pres_name%TYPE. Этот внутренний pr_name скрывает внешний аргумент pr_name. DBMS_OUTPUT.PUT_LINE использует varchar2, а PL / SQL не может неявно преобразовать запись pr_name.

Вот пример анонимного, который использует курсор для цикла и синтаксис записи для печати значений, возвращаемых курсором:

SQL>     declare
  2          cursor pres is select 'A' as vice_pres_name
  3              from dual union all select 'B' from dual;
  4      begin <<ex10_1>>
  5          for pr_name in pres loop
  6              dbms_output.put_line(pr_name.vice_pres_name);
  7          end loop;
  8      end ex10_1;
  9  /
A
B

PL/SQL procedure successfully completed.

Также обратите внимание, что курсор для цикла неявно открывает и закрывает курсор для вас.

...