Я пытался выполнить приведенный ниже оператор, чтобы избежать одиночных кавычек (то есть, используя две одинарные кавычки):
Я даже пытался использовать char(39) вместо кавычек:
Но это не помогло. Это единственные два решения, которые я нашел на этом сайте. Любая помощь?
Это упрощенный запрос, чтобы прояснить все ваши вопросы:
Я хочу добиться этого, но с помощью динамического запроса.
3 ответа
Слово совета. При тестировании динамического сценария сначала просто отобразите его, а не выполняйте. Таким образом, вы сможете увидеть это точно так, как это будет видно из заявления EXEC .
Теперь к вопросу. Следует помнить, что вы не передаете переменную в SplitValues а вместо этого объединяете значение переменной в сценарии. Поскольку значение varchar , оно должно быть заключено в кавычки. Отсутствие их – единственная проблема на самом деле.
Кавычки вокруг второго аргумента, запятой, в обоих случаях корректно экранируются. Итак, просто используйте любой из методов, чтобы добавить кавычки вокруг первого аргумента:
Очевидно, что первый метод более компактен, но, как я уже сказал, оба работают хорошо, как ясно показывает эта демонстрация SQL Fiddle .
Обратите внимание, однако, что вы могли бы легко избежать этой проблемы, если вы простите за каламбур. Вместо EXEC () вы можете использовать EXEC sp_executesql , который позволяет вам использовать параметры . Вот тот же сценарий, переписанный для использования sp_executesql :
Как видите, не нужно беспокоиться о экранировании кавычек: SQL Server берет на себя задачу правильной подстановки значений, а не вы.
В PL/SQL блоке, как экранировать одиночные кавычки в строчном литерале?
Пробую так, но это не работает:
1 ответ 1
Используйте альтернативное квотирование с вводным символом Q или q :
Ограничителем может быть любой символ отличный от пробельных, и он же должен завершать литерал перед последней одиночной кавычкой. Исключение скобки – <,(,[, , где в конце ожидается соответствующая закрывающаяся скобка.
Также, можно использовать две одиночные кавычки следующие друг за другом:
Но синтаксис квотирования с Q более гибкий и читабельный.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками sql oracle plsql или задайте свой вопрос.
Похожие
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.14.35781
Идея этого блога возникла из ошибок, которые я допускаю, исходя из неверных предположений. Читайте документацию, чтобы развеять ошибочные представления.
Одной из моих любимых команд SQL являлась QUOTENAME. При программировании генерации кода обычно возникает необходимость заключать строковое значение в кавычки и экранировать любые символы, совпадающие с теми, которыми вы ограничиваете строку, их удвоением. (А если у вас пара таких символов в строке, вам их потребуется уже четыре.) Например, чтобы взять следующую строку в одинарные кавычки (‘):
Чтобы иметь возможность использовать её в динамическом операторе или объявлении переменной, потребуется удвоить одинарную кавычку в строке:
Или, если вы Rob Volk (@sql_r на Twitter), и хотите создать раздражающую базу данных на вашем лучшем заклятом SQL Server, то, чтобы включить скобки в имя базы типа:
вам придется сделать так:
Удваивается закрывающая скобка, но не открывающая. Для экранирования можно использовать QUOTENAME. Параметрами этой функции являются строка и разделитель. По умолчанию удваивается скобка как у большинства имён SQL Server, хотя вы можете использовать любой символ для удвоения. Так для нашей строки:
Этот код вернет
objectName | string | |
---|---|---|
Mr. O’Malley | [Mr. O’Malley] | ‘Mr. O»Malley’ |
Кажется, работает отлично, поэтому вы чувствуете, что, если вам потребуется нагенерировать некоторый код, вы сможете поступить так: