Двойные кавычки в псевдонимах столбцов Oracle - PullRequest
5 голосов
/ 11 сентября 2008

Хорошо, это немного неясный вопрос, но, надеюсь, кто-то может помочь мне с этим.

Система, над которой я работаю, создает динамическую строку SQL для выполнения внутри хранимой процедуры и часть псевдонимов столбцов, определяющих динамический SQL, которые сами по себе являются значениями, полученными из другой таблицы пользовательских данных.

Так, например, строка может выглядеть примерно так:

SELECT table1.Col1 AS "This is an alias" FROM table1

Это отлично работает. Однако значение, используемое для псевдонима, может содержать символ двойной кавычки, который разбивает внешние кавычки. Я думал, что смогу как-то избежать двойных кавычек внутри псевдонима, но мне не повезло, когда я понял, как это сделать. Обратная косая черта не работает, и использование двух двойных кавычек подряд приводит к этой ошибке;

SQL Error: ORA-03001: unimplemented feature
03001. 00000 -  "unimplemented feature"
*Cause:    This feature is not implemented.

Кто-нибудь имел опыт работы с этой проблемой раньше? Приветствие для любого понимания, у кого есть.

p.s. кавычки нужны вокруг псевдонимов, потому что они могут содержать пробелы.

Ответы [ 5 ]

4 голосов
/ 11 сентября 2008

Можете ли вы просто поставить другой символ вместо двойных кавычек и заменить его на двойные кавычки в коде?

Примерно так:

SELECT table1.Col1 AS "This is |not| an alias" FROM table1

Тогда просто замените | с ".

Я знаю, что это взлом, но я не могу придумать лучшего решения ... А то, что ты делаешь, это взлом в любом случае. «Хорошим» способом было бы выбрать значения и имена столбцов отдельно и связать их в вашем коде. Это сделало бы вещи чище.

2 голосов
/ 02 февраля 2010

используйте оператор цитаты Oracle:

select q'#someone's quote#' from dual;

'#' можно заменить любым символом

1 голос
/ 11 сентября 2008

Когда я запускаю это:

select 'test"columnname"' from dual

Oracle возвращает это (обратите внимание на имя столбца, сгенерированного Oracle):

'TESTCOLUMNNAME'
--------------------------------
test"columnname

Тот факт, что имя столбца Oracle не включает мою двойную кавычку, говорит о том, что Oracle, вероятно, не может это представить.

Насколько я могу судить, лучше всего убрать двойные кавычки из ваших данных перед использованием имен столбцов. К сожалению, это также потребует, чтобы вы делали такую ​​же фильтрацию, когда выбираете эти столбцы, но я не вижу другого пути.

0 голосов
/ 23 сентября 2013

Попробуйте, две одинарные кавычки на самом деле выглядят как одна двойная кавычка в выводе:
select 1 as "University ''John Smith''" from dual;

0 голосов
/ 16 сентября 2008

возможно, плодотворной областью исследования было бы изучение метода цитат.

my $ quotedString = $ dbh-> quote ($ string);

...