2011-08-18 120 views
17

我正在嘗試針對Oracle數據庫的簡單INSERT語句。其中一個值是VARCHAR2字段,插入語句包含&符號。我該怎麼做呢?我嘗試以下方法:PL/SQL中的換行符&開發人員

  1. 逃脫&爲\ &與
  2. 一套一套逃生掃描關閉(這會導致ORA-00922缺失或無效選項錯誤)
  3. 集定義關(這會導致ORA-00922丟失或無效的選項錯誤)

任何其他想法?

+3

我在這個問題中使用chr(38)解決方案「解決」它:http://stackoverflow.com/questions/1137354/oracle-pl-sql-escape-character-for-a但想要的東西更優雅。 –

+0

您是否試圖通過SQL窗口或命令窗口執行插入操作? –

+0

雷,你有沒有嘗試將定義設置爲另一個角色,而不是完全將其設置爲關閉?不知道它是否會有所幫助,因爲我不使用PLSQL Developer,但它可能... – Ollie

回答

21

我如何解決它是逃脫&與另一&。

例如:

INSERT INTO Foo (Bar) VALUES ('Up && Away'); 

很好地工作。感謝所有幫助

+0

的確如此,但請注意,不要用「&&」替換「&」與plsqld本機搜索和替換工具,因爲它可能會進入無限循環。 – roselan

+1

不適合我......我的解決方案是答案「...插入tablex VALUES('Sid'||'&'||'Nancy'); ...」 –

+0

對我也不適用。 – th1rdey3

8

你有沒有試過類似的東西?

INSERT INTO tablex VALUES ('Sid ' || '&' || ' Nancy'); 

改進我的第一個答案,你的問題與PL/SQL Developer有關。如果你在PL/SQL Developer命令窗口中執行你的塊,你也可以使用標準的SET DEFINE OFF,這與SQL * Plus中的相同。

+0

我不認爲這比Ray提到的chr(38)'解決方案更優雅。 – APC

+0

,但是這是我一年前遇到類似問題時使用的。 http://www.orafaq.com/wiki/SQL_FAQ在SQL * Plus中也有一些很好的解決方案,例如SET ESCAPE'\',SET DEFINE〜或SET SCAN OFF – Aitor

+1

好的解決方案,比全局設置更好玩。稍微短一些:'Sid&'|| '南希'。 –

12

PL/SQL Developer需要時間熟悉的特性之一是大量不同的窗口類型。

其中之一是COMMAND窗口,它基本上是一個SQL * Plus仿真器。我們可以運行SQL * Plus命令以及SQL,因此SET ESCAPE,SET DEFINESET SCAN OFF在該窗口中工作。

4

的CONCAT工作完全罰款,我下面是我在我的SELECT語句中所做的:

select FUND_NM 
FROM PERFORMANCE 
WHERE upper(FUND_DESC) in ('My L&' ||'L FUNDS') 
2

我用chr(38),我需要在PL/SQL的符號。

addr:= 'mysite.com/order.aspx?no=5678' || CHR(38) || 'id=947'; 
--above line gives you 'mysite.com/order.aspx?no=5678&id=947'; 
12

當前版本的PL/SQL Developer(11.0.x)有一個按鈕來禁用/啓用替換變量。

enter image description here

+0

這很難找到。我花了10分鐘瀏覽設置中的所有選項,然後纔在網上找到它。 –

0

這僅僅是一個SQL編輯器的問題。要解決這個問題,只需使用SET DEFINE OFF編譯過程; 。 執行是PL(在服務器中執行)不會遇到這個問題。