Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann das Ergebnis einer gespeicherten Prozedur über ein Shell-Skript erfasst werden?

Die Version des anonymen Blocks im Shell-Skript wird nicht wie gezeigt ausgeführt, weil Sie keinen ein Schrägstrich nach dem Block, um es auszuführen . Wenn Sie das ausführen, erhalten Sie überhaupt keine Ausgabe. Wenn Sie es ändern, um einen Schrägstrich zu haben:

sqlplus -silent [email protected] <<EOF
set serveroutput on
declare
  DE_REC_COUNT number(10);
begin
    DE_DUP_PROC ('T_MCL_30404_20150317_020','MCL','30404','FT',DE_REC_COUNT);
end;
/
EOF

dann sehen Sie:

0

PL/SQL procedure successfully completed.

Sie haben die interaktive Version in SQL*Plus auch ohne den Schrägstrich gezeigt, aber Sie müssen diesen gehabt haben, um die von Ihnen gezeigte Ausgabe zu sehen.

Wenn Sie die Null wollen - die von einem dbms_output zu kommen scheint Aufruf in Ihrer Prozedur statt direkt aus Ihrem anonymen Block - In einer Shell-Variablen, auf die Sie später verweisen können, können Sie die Ausgabe des Heredocs einer Variablen zuweisen:

MY_VAR=`sqlplus -silent [email protected] <<EOF
set serveroutput on
set feedback off
declare

DE_REC_COUNT number(10);
begin
    DE_DUP_PROC ('T_MCL_30404_20150317_020','MCL','30404','FT',DE_REC_COUNT);
end;
/

EOF`

printf "Got back MY_VAR as %s\n" ${MY_VAR}

Beachten Sie, dass ich set feedback off hinzugefügt habe Sie sehen also nicht, dass die PL/SQL procedure successfully completed wurde Linie. Wenn Sie das jetzt ausführen, sehen Sie:

Got back MY_VAR as 0

und Sie können mit ${MY_VAR} alles tun, was Sie brauchen . Es hängt jedoch davon ab, was Sie mit "Erfassen" meinen.