Как я могу написать инструкцию insert, которая включает в себя символ и символ? Например, если я хотел вставить "J & J Construction" в столбец базы данных.
Я не уверен, что это имеет значение, но я использую Oracle 9i.
Как я могу написать инструкцию insert, которая включает в себя символ и символ? Например, если я хотел вставить "J & J Construction" в столбец базы данных.
Я не уверен, что это имеет значение, но я использую Oracle 9i.
Я продолжаю забывать об этом и снова возвращаться к нему! Я думаю, что лучший ответ - это комбинация ответов, представленных до сих пор.
Во-первых, и является префиксом переменной в sqlplus/sqldeveloper, поэтому проблема - когда она появляется, ожидается, что она будет частью имени переменной.
SET DEFINE OFF прекратит интерпретацию sqlplus и таким образом.
Но что, если вам нужно использовать переменные sqlplus и литералы и символы?
например.
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 '#'
Если вы делаете это из SQLPLUS, используйте
SET DEFINE OFF
чтобы остановить его, и как особый случай
Альтернативное решение, используйте конкатенацию и функцию chr:
select 'J' || chr(38) || 'J Construction' from dual;
Правильный синтаксис
set def off;
insert into tablename values( 'J&J');
Всегда есть функция chr(), которая преобразует ascii-код в строку.
т. что-то вроде: ВСТАВИТЬ В Таблица ЗНАЧЕНИЯ ( CONCAT ('J', CHR (38), 'J') )
SET SCAN OFF устарел http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a90842/apc.htm
В программе всегда используйте параметризованный запрос. Он избегает атак SQL Injection, а также любых других символов, которые являются особыми для анализатора SQL.
Я обнаружил, что использование одного из следующих вариантов работает:
SET DEF OFF
или
SET SCAN OFF
Я не знаю достаточно о базах данных, чтобы узнать, лучше ли это или "лучше", чем другой. Кроме того, если есть что-то лучше любого из них, пожалуйста, дайте мне знать.
Вы можете вставить такую строку как 'J' || '&' || 'Construction'. Он отлично работает.
insert into table_name (col_name) values('J'||'&'||'Construction');
INSERT INTO TEST_TABLE VALUES('Jonhy' Sport &'||' Fitness')
Вывод этого запроса: Jonhy Sport & Fitness
Если вы используете sql plus, то я думаю, что вам нужно выдать команду
SET SCAN OFF
SET ESCAPE ON;
INSERT VALUES("J\&J Construction") INTO custnames;
(Непроверенный, у меня нет ящика Oracle, и это было какое-то время)
Прекратить использование SQL/Plus, я настоятельно рекомендую PL/SQL Developer, это гораздо больше, чем инструмент SQL.
p.s. Некоторые люди предпочитают TOAD.
Смотри, Андрей
"J & J Construction":
SELECT CONCAT('J', CONCAT(CHR(38), 'J Construction')) FROM DUAL;