SQL* Плюс Oracle DB - Выполнение процедуры с логическим выходным параметром - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь выполнить хранимую процедуру с одним входным (varchar) и одним выходным (логическим) параметром из SQL* Plus.

Что у меня:

ALTER session SET nls_language='AMERICAN';
set serveroutput on;
declare bResult boolean;
exec procedureName('TEST', bResult);
/
exit;

Что я получаю:

PLS-00103: Encountered the symbol 'end-of-file' when expecting one of the following:
begin function pragma procedure subtype type <an identifier>

Я звоню SQL* Plus из пакетного сценария, и мне нужно позвонить по этому процедура и продолжить пакетный сценарий на основе результатов процедуры (bResult).

В SQL Developer Я могу успешно выполнить процедуру и вернуть результат, используя следующее (это не работает в SQL* Plus):

ALTER session SET nls_language='AMERICAN';
set serveroutput on;
declare bResult boolean;
begin
procedureName('TEST', bResult);
dbms_output.put_line(sys.diutil.bool_to_int(bResult));
end;

Что мне сделать, чтобы он работал с SQL* Plus?

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

На самом деле, вы объявляете переменную с помощью declare, вам нужно использовать анонимный блок следующим образом:

SQL>
SQL> ALTER session SET nls_language='AMERICAN';

Session altered.

    SQL> set serveroutput on;
    SQL> declare bResult boolean;
      2  begin -- this is needed
      3  proc('TEST', bResult); -- remove exec
      4  end;
      5  /

    PL/SQL procedure successfully completed.

    SQL> exit;
    Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    C:\Users\tejas.hingu>
0 голосов
/ 18 июня 2020

В SQL* Plus (не забывайте окончание /) работает следующее:

$ sqlplus system/oracle @tproc

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jun 18 16:31:55 2020
Version 19.5.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Last Successful login time: Thu Jun 18 2020 16:31:27 +02:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.5.0.0.0


Session altered.

SQL> --
SQL> create or replace procedure procedurename(p1 in varchar2, p2 out boolean)
  2  as
  3  begin
  4   p2 := true;
  5  end;
  6  /

Procedure created.

SQL> show errors
No errors.
SQL> 
SQL> ALTER session SET nls_language='AMERICAN';

Session altered.

SQL> set serveroutput on;
SQL> declare bResult boolean;
  2  begin
  3  procedureName('TEST', bResult);
  4  dbms_output.put_line(sys.diutil.bool_to_int(bResult));
  5  end;
  6  /
1

PL/SQL procedure successfully completed.

SQL> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...