PLS-00306: неправильное количество или типы аргументов при вызове PUT_LINE

Я впервые пытаюсь написать процедуру Oracle и получаю сообщение об ошибке (показанное в заголовке вопроса), сосредоточенное на строке DBMS_OUTPUT.PUT_LINE.

Я прочитал в Интернете, что он может возвращать только VARCAHR2 столбцы, поэтому я использовал только два не VARCHAR2 столбца, к которым осуществляется доступ, но я все еще получаю сообщение об ошибке. Эта ошибка возникает, когда я пытаюсь запустить ее непосредственно в Oracle SQL Developer.

CREATE OR REPLACE PROCEDURE LOGGING_PRC 
(
  STARTDATE_IN IN VARCHAR2,
  ENDDATE_IN IN VARCHAR2,
  NAMES_IN IN VARCHAR2, 
  MODS_IN IN VARCHAR2, 
  LOGS_IN IN VARCHAR2,

  ID_OUT OUT VARCHAR2,
  NAME_OUT OUT VARCHAR2,
  MODULE_OUT OUT VARCHAR2,
  ENTRYDATE_OUT OUT VARCHAR2,
  STATUS_OUT OUT VARCHAR2,
  TYPE_OUT OUT VARCHAR2
)  
  AS 
BEGIN
    SELECT
    CAST(ID_LOG AS VARCHAR2(16)),
     APNAME,
     APPMOD,
     CAST(ENTRYDATE AS VARCHAR2(30)),
     APPSTATUS,
     LOGTYPE
  INTO 
      ID_OUT,
      NAME_OUT,
      MODULE_OUT,
      ENTRYDATE_OUT,
      STATUS_OUT,
      TYPE_OUT
   FROM 
     BASE          
   WHERE     
     ENTRYDATE > STARTDATE_IN AND
     ENTRYDATE  < ENDDATE_IN AND
     (NAMES  =  NAMES_IN OR NAMES_IN IS NULL) AND
     (MODS = MODS_IN OR MODS_IN IS NULL) AND
     (LOGS = LOGS_IN  OR LOGS_IN IS NULL);      
  RETURN;
DBMS_OUTPUT.PUT_LINE(ID_OUT, NAME_OUT, MODULE_OUT, ENTRYDATE_OUT, STATUS_OUT, TYPE_OUT);
END LOGGING_PRC;

Кто-нибудь видит, где у меня неправильный код?


person michaelk46    schedule 08.03.2016    source источник
comment
синтаксис показывает, что требуется только один строковый аргумент, а не список.   -  person Alex Poole    schedule 08.03.2016


Ответы (1)


DBMS_OUTPUT.PUT_LINE определяется следующим образом

procedure put_line(a varchar2);

поэтому он принимает только один входной параметр.

Если вам нужно распечатать значения более чем одного поля, вам нужно объединить их в один varchar2; вы можете попробовать:

DBMS_OUTPUT.PUT_LINE(ID_OUT || ',' || NAME_OUT || ',' || MODULE_OUT || ',' || ENTRYDATE_OUT || ',' || STATUS_OUT || ',' || TYPE_OUT);
person Aleksej    schedule 08.03.2016