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

Аварийный символ Oracle pl-sql (для "'" )

Когда я пытаюсь выполнить оператор INSERT в oracle, я получил ошибку SQL Error: ORA-00917: missing comma, потому что в моем выражении INSERT есть значение Alex Tea Factory.

Как мне избежать '?

4b9b3361

Ответ 1

Чтобы избежать этого, удвойте кавычки:

INSERT INTO TABLE_A VALUES ( 'Alex' Tea Factory' );

Ответ 2

В SQL вы избегаете цитаты по другой цитате:

SELECT 'Alex' Tea Factory' FROM DUAL

Ответ 3

вы можете использовать ESCAPE, как приведенный ниже пример

Символ "_" wild card используется для соответствия ровно одному символу, а "%" используется для соответствия нулю или более вхождений любых символов. Эти символы могут быть экранированы в SQL.

SELECT name FROM emp WHERE id LIKE '%/_%' ESCAPE '/';

То же самое работает внутри PL/SQL:

 if( id like '%/_%' ESCAPE '/' )

Это относится только к похожим шаблонам, например, в вставке нет необходимости бегать _ или%, они все равно используются как простые символы. В произвольных строках только "нужно экранировать".

Ответ 4

SELECT q'[Alex Tea Factory]' FROM DUAL

Ответ 5

В вашем вопросе подразумевается, что вы создаете инструкцию INSERT, объединяя строки. Я предлагаю, что это плохой выбор, поскольку он оставляет вас открытым для SQL-инъекций, если строки получены из пользовательского ввода. Лучше всего использовать маркеры параметров и привязать значения к маркерам. Если вы ищете Oracle parameter markers, вы, вероятно, найдете некоторую информацию для своей конкретной технологии внедрения (например, С# и ADO, Java и JDBC, Ruby и RubyDBI и т.д.).

Поделитесь и наслаждайтесь.

Ответ 6

Вместо того, чтобы беспокоиться о каждом апострофе в вашем утверждении. Вы можете легко использовать обозначение q' Notation.

пример

SELECT q'(Alex Tea Factory)' FROM DUAL;

Ключевые компоненты в этой записи

  • q' который обозначает начало обозначения
  • ( необязательный символ, обозначающий начало оператора для полного экранирования.
  • Alex Tea Factory (что само по себе утверждение)
  • )' Закрывающая скобка с апострофом, обозначающим конец обозначения.

И так, что вы можете указать, сколько апострофов в обозначениях, не беспокоясь о каждом из них, все они будут безопасно обрабатываться.

ВАЖНАЯ ЗАМЕТКА

Поскольку вы использовали ( вы должны закрыть его )', и помните, что необязательно использовать любой другой символ, например, следующий код будет работать точно так же, как предыдущий

SELECT q'[Alex Tea Factory]' FROM DUAL;