Как написать инструкцию insert, которая содержит символ &? Например, если я хотел вставить «J & J Строительство» в столбец базы данных.Как вставить строку, которая содержит «&»
Я не уверен, что это имеет значение, но я использую Oracle 9i.
Как написать инструкцию insert, которая содержит символ &? Например, если я хотел вставить «J & J Строительство» в столбец базы данных.Как вставить строку, которая содержит «&»
Я не уверен, что это имеет значение, но я использую 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
Если вы хотите использовать другой экранирующий символ:
set define on
set escape '#'
define myvar=/forth
select 'back\ #& &myvar' as swing from dual;
При установке конкретного экранирующего символа, вы можете увидеть «SP2-0272: побег символ не может быть буквенно-цифровым или пробельным ». Вероятно, это означает, что вы уже определили escape-символ, и все становится ужасно саморефлексивным. Чистый способ избежать этой проблемы, чтобы установить побег от первого:
set escape off
set escape '#'
Если вы используете SQL плюс то, я думаю, что вам нужно выдать команду
SET SCAN OFF
Если вы делаете это из SQLPLUS использовать
SET DEFINE OFF
, чтобы остановить его ступая & как особый случай
Работает в SQL Developer также – 2008-09-30 15:47:43
SET ESCAPE ON;
INSERT VALUES("J\&J Construction") INTO custnames;
(Некомпьютерный, не имеет ящика Oracle под рукой, и он имеет был в то время)
Тогда вы должны были бы иметь специальную обработку для задания обратной косой черты. – 2008-09-30 15:47:03
Я обнаружил, что, используя один из следующих вариантов работы:
SET DEF OFF
или
SET SCAN OFF
я не знаю достаточно о базах данных, чтобы знать если лучше или «лучше», чем другой. Кроме того, если есть что-то лучше, чем любой из этих, пожалуйста, дайте мне знать.
SET SCAN OFF является устаревшим http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a90842/apc.htm
В программе всегда использовать параметризованный запрос. Он избегает атак SQL Injection, а также любых других символов, которые являются особыми для анализатора SQL.
Правильный синтаксис
set def off;
insert into tablename values('J&J');
Прекратите использование SQL/Plus, я настоятельно рекомендую PL/SQL Developer это гораздо больше, чем инструмент SQL.
p.s. Некоторые люди предпочитают TOAD.
Что делать, если вам нужно работать с коробкой Unix/Linux !!! :) – Neels 2014-10-09 14:50:18
Там всегда функция CHR(), которая преобразует код ASCII в строку.
ie. что-то вроде: INSERT INTO таблицу ЗНАЧЕНИЯ ( Concat ('J', CHR (38), 'J') )
Альтернативное решение, использование конкатенации и функция CHR:
select 'J' || chr(38) || 'J Construction' from dual;
Вы можете вставить такую строку как 'J' || ' & '||' Строительство '. Он отлично работает.
insert into table_name (col_name) values('J'||'&'||'Construction');
Посмотрите, Эндрю:
"J & J Строительство":
ВЫБРАТЬ CONCAT ('J', CONCAT (CHR (38), 'J Строительство')) FROM DUAL ;
INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness')
выход Этот запрос по: Jonhy в Спорт & Фитнес
np! как я уже сказал, я продолжаю забывать об этом, так счастлив за возможность записать «всеобъемлющий ответ» ;-) – tardate 2009-01-20 08:06:45
Это [SQL * Plus FAQ] (http://www.orafaq.com/wiki/SQL*Plus_FAQ# How_does_one_disable_interactive_prompting_in_SQL.2APlus.3F) дает аналогичный ответ. – DavidRR 2012-11-16 14:15:22