2017-04-07 10 views
0

Ich habe eine gespeicherte Prozedur in Oracle mit Out-Parameter als sys ref_cursor. Ich muss die SP von Korn Shell ausführen. Lesen Sie die Ausgabe und verwenden Sie sie als E-Mail-Nachrichtentext. Aber ich konnte keinen Beispielcode finden, um sys ref cursor in Unix zu lesen. Unten ist mein Code. Wie kann ich lesen cur? print cur scheint keine Ausgabe zu drucken.Daten von Oracle SP holen Out Param SYS_REFCURSOR in Unix Korn Shell-Skript

#!/usr/bin/ksh 

function runproc 
{ 
    #read ref cursor from proc 
    cur=`sqlplus -s $connectiondetails <<EOF 
     SET PAGESIZE 0 FEEDBACK ON VERIFY OFF HEADING OFF ECHO OFF 
     var return_val ; 
     exec myproc_retcur(WEEKNUM ,return_val);  
     EXIT; 
     EOF` 
     print return_val 
    return cur 
} 

#---Start----- 
runproc cur 
sendmail "Weekly load test results", cur 

Antwort

1

Sie haben Ihre print return_val an der falschen Stelle; Es sollte innerhalb des SQL * PLUS-Befehls vor dem Exit stehen, um die Ref-Cursor-Variable auszudrucken.

Sie müssen auch return_val mit einem Doppelpunkt in Ihrem Prozeduraufruf vorangestellt werden, um anzuzeigen, dass es die Bind-Variable verwendet, die Sie gerade deklariert haben - obwohl Sie den Variablentyp auch aus seiner Deklaration weggelassen haben. Dies scheint zu tun, was Sie wollen:

function runproc 
{ 
    #read ref cursor from proc 
    cur=`sqlplus -s $connectiondetails <<EOF 
     SET PAGESIZE 0 FEEDBACK ON VERIFY OFF HEADING OFF ECHO OFF 
     var return_val refcursor 
     exec myproc_retcur(14, :return_val); 
     print return_val 
     EXIT 
     EOF` 
    return cur 
} 

Sie nicht gezeigt haben, wo WEEKNUM herkommt so habe ich hart codiert, dass auf eine Zahl für den Moment.

Ich denke, dass Sie wahrscheinlich, Feedback, nicht auf, nebenbei setzen möchten.

+0

danke. Kannst du auch sagen, wie man die Werte zur Konsole druckt? wie Drucken "Text". Print cur scheint nicht zu funktionieren – kten

+0

Sie meinen aus dem ksh Kontext - wie 'printf '% s \ n" $ cur "? –

Verwandte Themen