DBMS_OUTPUT.NEW_LINE и DBMS_OUTPUT.NEW_LINE () отличаются? - PullRequest
4 голосов
/ 07 апреля 2010

В чем разница между этими двумя утверждениями?

dbms_output.new_line(); // with no parameters.
dbms_output.new_line;    // with no parameters,no round brackets

Если имеется перегрузка функции, даже для этого требуются закрывающие и открывающие скобки после имени функции.

1 Ответ

3 голосов
/ 07 апреля 2010

Ну, разница в том, что первая формулировка проваливается, а вторая - успешно:

SQL> begin
  2      dbms_output.put_line('some text');
  3      dbms_output.put('about to new_line with no parameters');
  4      dbms_output.new_line;
  5  end;
  6  /
some text
about to new_line with no parameters

PL/SQL procedure successfully completed.

SQL> begin
  2      dbms_output.put_line('some text');
  3      dbms_output.put('about to new_line with a parameter');
  4      dbms_output.new_line('');
  5  end;
  6  /
    dbms_output.new_line('');
    *
ERROR at line 4:
ORA-06550: line 4, column 5:
PLS-00306: wrong number or types of arguments in call to 'NEW_LINE'
ORA-06550: line 4, column 5:
PL/SQL: Statement ignored


SQL>

редактировать

Что работает, так это пустые скобки ...

SQL> begin
  2      dbms_output.put_line('some text');
  3      dbms_output.put('about to new_line with a parameter');
  4      dbms_output.new_line();
  5  end;
  6  /
some text
about to new_line with a parameter

PL/SQL procedure successfully completed.

SQL>

Я не знаю, когда Oracle фактически начал отменять это соглашение, но я узнал об этом, только когда они представили OO. Некоторые функции-члены (то есть методы) в типах не будут работать, если мы не добавим пустые скобки, например, XMLType's getClobVal(). Но квадратные скобки не являются обязательными для стандартных процедурных вызовов.

...