2016-04-18 4 views
0

Я вставляю несколько строк данных в таблицу, и один из них вызывает необычный результат. КодOracle SQL. Вставка строки вызывает всплывающее окно?

INSERT INTO TABLE_GROUPRISK 
(GROUP, RISKLEVEL) VALUES ('APIs & Intermediates','Low'); 

Когда я запускаю это утверждение, я получаю всплывающее слово со словом «Промежуточные». Если я нажимаю X на всплывающем окне, строка вставляется в

APIs null 

Вместо того, как

APIs & Intermediates 

Кто-нибудь знает, что здесь происходит?

+3

и нужно экранировать или использовать 'SET DEFINE OFF' перед тем выполнение запроса. Oracle использует & для определения/разрешения ввода пользователя во время выполнения. – xQbert

+0

. Длительное обсуждение его здесь: https://community.oracle.com/thread/468604?tstart=0 – xQbert

+1

@xQbert: если быть точным: инструменты Oracle ** * * используйте '&' для входа во время выполнения. Не база данных Oracle. Если вы используете другой инструмент, то SQL * Plus или SQL Developer, тогда этого не произойдет. –

ответ

1

Символ амперсанда & должен быть экранирован в строке sql.

Вместо этого вы можете заменить его символьным кодом.

INSERT INTO TABLE_GROUPRISK 
(GROUP, RISKLEVEL) VALUES ('APIs ' || chr(38) || ' Intermediates' ,'Low'); 

в качестве альтернативы вы можете поместить & перед первой одинарной кавычки

INSERT INTO TABLE_GROUPRISK 
(GROUP, RISKLEVEL) VALUES ('APIs &' || ' Intermediates','Low'); 
+0

Это сработало отлично. Спасибо CathalMF – jdjohnson920

+0

@ jdjohnson920 Не забывайте поднимать и отмечать его как правильный ответ. – CathalMF

3

«&» используется для замещения переменных, поэтому, когда вы пишете спрашивает «&» Oracle для значения использовать аа заменителя ; например:

SQL> INSERT INTO TABLE_GROUPRISK 
    2 ("GROUP", RISKLEVEL) VALUES ('APIs & Intermediates','Low'); 
Enter value for intermediates: XXX 
old 2: ("GROUP", RISKLEVEL) VALUES ('APIs & Intermediates','Low') 
new 2: ("GROUP", RISKLEVEL) VALUES ('APIs XXX','Low') 

1 row created. 

Вы не можете просто избавиться от нее:

SQL> INSERT INTO TABLE_GROUPRISK 
    2 ("GROUP", RISKLEVEL) VALUES ('APIs \& Intermediates','Low'); 
Enter value for intermediates: YYY 
old 2: ("GROUP", RISKLEVEL) VALUES ('APIs \& Intermediates','Low') 
new 2: ("GROUP", RISKLEVEL) VALUES ('APIs \YYY','Low') 

1 row created. 

SQL> INSERT INTO TABLE_GROUPRISK 
    2 ("GROUP", RISKLEVEL) VALUES (q'[APIs & Intermediates]','Low'); 
Enter value for intermediates: ZZZ 
old 2: ("GROUP", RISKLEVEL) VALUES (q'[APIs & Intermediates]','Low') 
new 2: ("GROUP", RISKLEVEL) VALUES (q'[APIs ZZZ]','Low') 

1 row created. 

Вы можете решить, чтобы избежать замены:

SQL> set define off 
SQL> INSERT INTO TABLE_GROUPRISK 
    2 ("GROUP", RISKLEVEL) VALUES ('APIs & Intermediates','Low'); 

1 row created. 



SQL> select "GROUP" from table_grouprisk; 

GROUP 
-------------------------------------------------------------------------------- 
APIs XXX 
APIs \YYY 
APIs ZZZ 
APIs & Intermediates 
Смежные вопросы