sql >> Database teknologi >  >> RDS >> Oracle

Hvordan fanger man resultatet af lagret procedure gennem shell-script?

Versionen af ​​den anonyme blok i shell-scriptet vil ikke blive udført som vist, fordi du ikke har et skråstreg efter blokken for at køre den . Hvis du kører det, får du intet output overhovedet. Hvis du ændrer den til at have en skråstreg:

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

så vil du se:

0

PL/SQL procedure successfully completed.

Du har også vist den interaktive version i SQL*Plus uden skråstreg, men du skal have haft det for at se det output, du viste.

Hvis du vil have nullet - som ser ud til at komme fra en dbms_output indkald din procedure i stedet for direkte fra din anonyme blok - i en shell-variabel, du kan henvise til senere, kan du tildele output fra heredoc til 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}

Bemærk, at jeg har tilføjet set feedback off så du kan ikke se PL/SQL procedure successfully completed linje. Når du nu kører det, vil du se:

Got back MY_VAR as 0

og du kan gøre, hvad du skal med ${MY_VAR} . Det afhænger dog af, hvad du mener med 'fange'.



  1. Hvordan ændrer jeg placeringen af ​​en kolonne i en PostgreSQL-databasetabel?

  2. MySQL opdaterer et felt ved hjælp af info i anden tabel

  3. På opgraderingsmetoden bliver ikke kaldt i android sqlite

  4. Bedste måde at gemme tid (tt:mm) i en database