2017-06-21 67 views
1

我有簡單的bash腳本,它使用isql查詢一個Firebird數據庫,並將結果傳遞給連接到另一個數據庫的isql。第一個結果集的格式爲UPDATE ...或INSERT ...,第二個isql執行這些結果集。 到目前爲止,數據一直是數字;現在我必須處理可能包含嵌入式報價的名稱。這會導致第二個isql的輸入無效。 確保單引號(以名稱而不是總結果集合)加倍的最簡單方法是什麼?firebird isql結果中的轉義報價

UPDATE FOO SET NAME='O'CONNOR' WHERE ...; 

應該是

UPDATE FOO SET NAME='O''CONNOR' WHERE ...; 

bash的代碼是

(isql -i update.sql server:db1; echo "COMMIT;") | egrep "^UPDATE|^COMMIT"|isql -e server2:db2 

凡update.sql結果集是上面所示的更新命令。 不,我不擔心小鮑比表:)

+0

您有問題要問?你似乎明白該怎麼做。 –

+0

你可以包含你運行的命令嗎?這將使它更容易看到發生了什麼..是不是fb-isql? isql可能會與unixodbc軟件包衝突。 – jcalfee314

+0

我的問題是如何使更新語句#1看起來像#2時,管道到第二個isql。我無法弄清楚如何讓第一個結果集轉義嵌入式報價,或者如何讓bash發現嵌入式報價必須在管道到isql之前轉義。 –

回答

2

Mark Rotteveel好心的指出,我忘記了Firebird函數REPLACE (str, find, repl)用雙引號替換結果集中的單引號。