2017-04-18 58 views
0

這是繼續閱讀下面的文章。我能夠將數據從oracle存儲過程返回到unix腳本。 Fetch data from Oracle SP Out Param SYS_REFCURSOR in Unix Korn Shell Script將oracle refcursor轉換爲unix腳本中的文本

但是,雖然通過記錄循環我沒有得到預期的結果。以下是代碼。打印變量之前,我得到一個錯誤"cannot open"

weeknum=$1 
    #read ref cursor from proc 
    cur=`sqlplus -s $connection <<EOF 
     SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
     var return_val refcursor 
     exec WEEKLYLOAD($weeknum, :return_val); 
     print return_val 
     EXIT 
     EOF` 
    print "done" 

    table="" 
    while read -r line 
    do 
    $table=$$table"\n"$line 
    done < $cur 

回答

1

你正試圖從你的cur變量直接輸入,但您使用的形式尋找與第一個字的名稱的文件在$cur - 而不是該變量的全部內容。您看到的錯誤將是您的過程打開的參考光標第一行第一列中的第一個單詞。

因此,如果您的引用光標打開了一個查詢,例如產生三行輸出的值爲A,B和C,它將嘗試從名爲A的文件讀取輸入,並報告cannot open(除非調用了一個文件碰巧存在於當前工作目錄中)。

可以呼應的變量和管道它來代替:

echo "$cur" | while read -r line 
do 
    table=$table"\n"$line 
done 

我已經刪除從分配額外的$符號。但是這看起來並不特別有用;與上面相同的三個行的結果,$table竟又爲:

\nA\nB\nC 

如果你只是想打印的$cur內容到控制檯,您可以使用其中的一個(或其他):

echo "$cur" 
printf "%s\n" "$cur" 

這都產生

A 
B 
C 
+0

謝謝!有效。我需要將這些數據作爲郵件正文發送。所以這是很好的解決方案。 – kten

+0

不知道如何迭代$ cur中的每一列。希望它脫節:) – kten