«&» используется для замещения переменных, поэтому, когда вы пишете спрашивает «&» 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
и нужно экранировать или использовать 'SET DEFINE OFF' перед тем выполнение запроса. Oracle использует & для определения/разрешения ввода пользователя во время выполнения. – xQbert
. Длительное обсуждение его здесь: https://community.oracle.com/thread/468604?tstart=0 – xQbert
@xQbert: если быть точным: инструменты Oracle ** * * используйте '&' для входа во время выполнения. Не база данных Oracle. Если вы используете другой инструмент, то SQL * Plus или SQL Developer, тогда этого не произойдет. –