2012-12-03 57 views
0

我試圖運行一個查詢,它將在其輸出中包含靜態列。 select語句的作品時,我通過CLP運行它,而不是當我一個shell腳本中執行:如何在db2 sql查詢中運行撇號,在shell腳本中運行?

su - myid -c 'db2 connect to mydb;db2 -x -v "select COL1,'','',COL2,'','',COL3L from MYTABLE fetch first 10 rows only"; db2 connect reset;' 

當我運行此,輸出錯誤我得到的是:

SQL0104N An unexpected token "," was found following "select COL1,". 
Expected tokens may include: "<select_sublist>". SQLSTATE=42601 

SQL1024N A database connection does not exist. SQLSTATE=08003 

我甚至還試圖將select語句放入一個變量中,並將其插入到語句中,但仍然是相同的錯誤。任何幫助將不勝感激。 -Thx

回答

2

你應該逃避單引號與一個反彈,如:

su - myid -c 'db2 connect to mydb;db2 -x -v "select COL1,\'\',\'\',COL2,\'\',\'\',COL3L from MYTABLE fetch first 10 rows only"; db2 connect reset;' 

當心,我沒有測試它...手頭沒有外殼剛纔。

UPDATE:

最後我一點點的測試,我得到它的工作後得到了我的手在DB2實例..。原來的語法錯誤。報價單引號的正確方法是(在這種情況下)「\」「在:

su - myid -c 'db2 connect to mydb;db2 -x -v "select COL1,'\'','\'',COL2,'\'','\'',COL3L from MYTABLE fetch first 10 rows only"; db2 connect reset;' 

那是因爲周圍的整個命令的單引號必須被關閉(」),以提供逃逸db2查詢(\')中的單引號,然後重新打開以恢復命令引號(')。奇怪,因爲它看起來,工程....

這是我用來測試它的命令:

bash -c 'db2 connect to mydb;db2 -x -v "select 1,'\'','\'',2,'\'','\'',3 from SYSIBM.SYSDUMMY1 fetch first 10 rows only"; db2 connect reset;' 
+0

謝謝您的回覆@卡羅 - 佩萊格里尼 嘗試,並得到了以下** 0403- 057第6行的語法錯誤:'「'不匹配** – fembot

+0

@fembot答案已更新(並已測試過) –

+0

工作正常!非常感謝!我永遠不會發現這件事。感謝您對此的幫助! – fembot