Когда я пытаюсь выполнить оператор INSERT
в oracle, я получил ошибку SQL Error: ORA-00917: missing comma
, потому что в моем выражении INSERT
есть значение Alex Tea Factory
.
Как мне избежать '
?
Когда я пытаюсь выполнить оператор INSERT
в oracle, я получил ошибку SQL Error: ORA-00917: missing comma
, потому что в моем выражении INSERT
есть значение Alex Tea Factory
.
Как мне избежать '
?
Чтобы избежать этого, удвойте кавычки:
INSERT INTO TABLE_A VALUES ( 'Alex' Tea Factory' );
В SQL вы избегаете цитаты по другой цитате:
SELECT 'Alex' Tea Factory' FROM DUAL
вы можете использовать ESCAPE, как приведенный ниже пример
Символ "_" wild card используется для соответствия ровно одному символу, а "%" используется для соответствия нулю или более вхождений любых символов. Эти символы могут быть экранированы в SQL.
SELECT name FROM emp WHERE id LIKE '%/_%' ESCAPE '/';
То же самое работает внутри PL/SQL:
if( id like '%/_%' ESCAPE '/' )
Это относится только к похожим шаблонам, например, в вставке нет необходимости бегать _ или%, они все равно используются как простые символы. В произвольных строках только "нужно экранировать".
SELECT q'[Alex Tea Factory]' FROM DUAL
В вашем вопросе подразумевается, что вы создаете инструкцию INSERT, объединяя строки. Я предлагаю, что это плохой выбор, поскольку он оставляет вас открытым для SQL-инъекций, если строки получены из пользовательского ввода. Лучше всего использовать маркеры параметров и привязать значения к маркерам. Если вы ищете Oracle parameter markers
, вы, вероятно, найдете некоторую информацию для своей конкретной технологии внедрения (например, С# и ADO, Java и JDBC, Ruby и RubyDBI и т.д.).
Поделитесь и наслаждайтесь.
Вместо того, чтобы беспокоиться о каждом апострофе в вашем утверждении. Вы можете легко использовать обозначение q' Notation.
пример
SELECT q'(Alex Tea Factory)' FROM DUAL;
Ключевые компоненты в этой записи
q'
который обозначает начало обозначения(
необязательный символ, обозначающий начало оператора для полного экранирования.)'
Закрывающая скобка с апострофом, обозначающим конец обозначения.И так, что вы можете указать, сколько апострофов в обозначениях, не беспокоясь о каждом из них, все они будут безопасно обрабатываться.
ВАЖНАЯ ЗАМЕТКА
Поскольку вы использовали (
вы должны закрыть его )'
, и помните, что необязательно использовать любой другой символ, например, следующий код будет работать точно так же, как предыдущий
SELECT q'[Alex Tea Factory]' FROM DUAL;