Подтвердить что ты не робот

Как вставить строку, содержащую "&"

Как я могу написать инструкцию insert, которая включает в себя символ и символ? Например, если я хотел вставить "J & J Construction" в столбец базы данных.

Я не уверен, что это имеет значение, но я использую Oracle 9i.

4b9b3361

Ответ 1

Я продолжаю забывать об этом и снова возвращаться к нему! Я думаю, что лучший ответ - это комбинация ответов, представленных до сих пор.

Во-первых, и является префиксом переменной в sqlplus/sqldeveloper, поэтому проблема - когда она появляется, ожидается, что она будет частью имени переменной.

SET DEFINE OFF прекратит интерпретацию sqlplus и таким образом.

Но что, если вам нужно использовать переменные sqlplus и литералы и символы?

  • Вам нужно SET DEFINE ON, чтобы заставить переменные работать.
  • И SET ESCAPE ON, чтобы избежать использования &.

например.

set define on
set escape on

define myvar=/forth

select 'back\\ \& &myvar' as swing from dual;

Выдает:

old   1: select 'back\\ \& &myvar' from dual
new   1: select 'back\ & /forth' from dual

SWING
--------------
back\ & /forth

Если вы хотите использовать другой escape-символ:

set define on
set escape '#'

define myvar=/forth

select 'back\ #& &myvar' as swing from dual;

Когда вы устанавливаете конкретный escape-символ, вы можете увидеть "SP2-0272: escape-символ не может быть буквенно-цифровым или пробельным". Вероятно, это означает, что вы уже определили escape-символ, и все становится ужасно саморефлексивным. Чистый способ избежать этой проблемы - сначала отключить отключение:

set escape off
set escape '#'

Ответ 2

Если вы делаете это из SQLPLUS, используйте

SET DEFINE OFF  

чтобы остановить его, и как особый случай

Ответ 3

Альтернативное решение, используйте конкатенацию и функцию chr:

select 'J' || chr(38) || 'J Construction' from dual;

Ответ 4

Правильный синтаксис

set def off;
insert into tablename values( 'J&J');

Ответ 5

Всегда есть функция chr(), которая преобразует ascii-код в строку.

т. что-то вроде: ВСТАВИТЬ В  Таблица ЗНАЧЕНИЯ (  CONCAT ('J', CHR (38), 'J') )

Ответ 7

В программе всегда используйте параметризованный запрос. Он избегает атак SQL Injection, а также любых других символов, которые являются особыми для анализатора SQL.

Ответ 8

Я обнаружил, что использование одного из следующих вариантов работает:

SET DEF OFF

или

SET SCAN OFF

Я не знаю достаточно о базах данных, чтобы узнать, лучше ли это или "лучше", чем другой. Кроме того, если есть что-то лучше любого из них, пожалуйста, дайте мне знать.

Ответ 9

Вы можете вставить такую ​​строку как 'J' || '&' || 'Construction'. Он отлично работает.

insert into table_name (col_name) values('J'||'&'||'Construction');

Ответ 10

INSERT INTO TEST_TABLE VALUES('Jonhy' Sport &'||' Fitness')

Вывод этого запроса: Jonhy Sport & Fitness

Ответ 11

Если вы используете sql plus, то я думаю, что вам нужно выдать команду

SET SCAN OFF

Ответ 12

SET ESCAPE ON;
INSERT VALUES("J\&J Construction") INTO custnames;

(Непроверенный, у меня нет ящика Oracle, и это было какое-то время)

Ответ 13

Прекратить использование SQL/Plus, я настоятельно рекомендую PL/SQL Developer, это гораздо больше, чем инструмент SQL.

p.s. Некоторые люди предпочитают TOAD.

Ответ 14

Смотри, Андрей

"J & J Construction":

SELECT CONCAT('J', CONCAT(CHR(38), 'J Construction')) FROM DUAL;