Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak przechwycić wynik procedury składowanej za pomocą skryptu powłoki?

Wersja anonimowego bloku w skrypcie powłoki nie zostanie wykonana, jak pokazano, ponieważ nie masz ukośnik po bloku, aby go uruchomić . Jeśli to uruchomisz, nie otrzymasz żadnych wyników. Jeśli zmienisz go na ukośnik:

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

wtedy zobaczysz:

0

PL/SQL procedure successfully completed.

Pokazałeś wersję interaktywną w SQL*Plus również bez ukośnika, ale musiałeś to mieć, aby zobaczyć wyniki, które pokazałeś.

Jeśli chcesz zero - które wydaje się pochodzić z dbms_output wywołaj w swojej procedurze, a nie bezpośrednio z anonimowego bloku - w zmiennej powłoki, do której możesz odwołać się później, możesz przypisać wyjście dokumentu heredoc do zmiennej:

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}

Zauważ, że dodałem set feedback off więc nie widzisz, że PL/SQL procedure successfully completed linia. Teraz po uruchomieniu zobaczysz:

Got back MY_VAR as 0

i możesz zrobić, co tylko chcesz, dzięki ${MY_VAR} . Zależy to jednak od tego, co rozumiesz przez „przechwytywanie”.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01861:literał nie pasuje do ciągu formatu

  2. Korzystanie z OraclePreparedStatement z połączeniem DBCP

  3. Odbicie w PLSQL?

  4. Nie można użyć nazwy tabeli PL/SQL jako zmiennej w procedurze PL/SQL?

  5. Program PL/SQL do drukowania danych pracowników