sql >> Databasteknik >  >> RDS >> Oracle

Hur fångar man resultatet av lagrad procedur genom skalskript?

Versionen av det anonyma blocket i skalskriptet kommer inte att köras som visas, eftersom du inte har ett snedstreck efter blocket för att köra det . Om du kör det får du ingen effekt alls. Om du ändrar den till att ha ett snedstreck:

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

då ser du:

0

PL/SQL procedure successfully completed.

Du har visat den interaktiva versionen i SQL*Plus utan snedstreck också, men du måste ha haft det för att se utdata du visade.

Om du vill ha nollan - som verkar komma från en dbms_output anropa din procedur, snarare än direkt från ditt anonyma block - i en skalvariabel som du kan hänvisa till senare kan du tilldela utdata från heredoc till en variabel:

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}

Observera att jag har lagt till set feedback off så du ser inte att PL/SQL procedure successfully completed linje. Nu när du kör det kommer du att se:

Got back MY_VAR as 0

och du kan göra vad du behöver med ${MY_VAR} . Det beror på vad du menar med "fånga".



  1. MySQL-fråga - Summa kapaciteten hos flera lager

  2. MySQL match() mot() - ordning efter relevans och kolumn?

  3. Det går inte att ansluta till SQL Server med PHP

  4. PHP-strängvariabel i WHERE-sats MySQL