我執行以下查詢,它回傳一個值,它作業正常。
echo "select myquery ;" | sqlplus user/pass@dbase | | head -4 | tail -1
問題是,當回傳的一個值太大時,它會分成多行,因此我進一步使用的 ETL 工具會出現問題。因此,我嘗試使用 linesize 選項,但無法將其與查詢結合使用。
如果我連接到 sqlplus 并運行:
SET LINESIZE 3200后跟select myquery ;輸出很好,但我無法在 echo 陳述句中組合它們。我嘗試過不同的方式,例如:
echo "SET LINESIZE 3200 / select myquery ;" | sqlplus user/pass@dbase | | head -4 | tail -1
有任何想法嗎?
謝謝!
uj5u.com熱心網友回復:
你可以試試這個:
sqlplus user/pass@dbase << "EOF" |...| head -4 | tail -1
SET LINESIZE 3200;
select myquery ;
EOF
uj5u.com熱心網友回復:
一個heredoc(如@Philippe's answer所示)將更容易閱讀和維護,但如果出于某種原因你真的想將它保留在一行中,你可以添加-e標志echo并嵌入新行:
echo -e "SET LINESIZE 3200 \n select myquery ;" | sqlplus user/pass@dbase | head -4 | tail -1
或使用printf:
printf "set linesize 3200 \n select myquery ;\n" | sqlplus user/pass@dbase | head -4 | tail -1
|(在兩者中,我都從您的原始版本中取出了額外內容)
您可以擴展它以避免頭部和尾部輸出的需要:
printf "set linesize 3200 \n set pagesize 0 \n set feedback off \n select myquery ;\n" | sqlplus -s user/pass@dbase
或結合各種set選項:
printf "set linesize 3200 pagesize 0 feedback off \n select myquery ;\n" | sqlplus -s user/pass@dbase
-s壓制旗幟;從您使用的頭/尾值我想您已經擁有它并且沒有顯示它。(我通常-l也會加入,因此如果憑據錯誤也不會卡住。)其他set命令洗掉列標題和“選擇了 1 行”。資訊。
雖然這是一個較長的單個命令列,但它的優點是不操縱/修改您可能得到的任何錯誤輸出。
或者作為一個heredoc:
sqlplus -l -s user/pass@dbase <<EOF
set linesize 3200
set pagesize 0
set feedback off
select myquery ;
EOF
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/458971.html
標籤:linux 甲骨文 oracle12c sqlplus
下一篇:通過ansible從串列中安裝包
