Двойные кавычки в псевдонимах столбцов Oracle

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

Система, над которой я работаю, строит динамическую строку 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. кавычки необходимы вокруг псевдонимов, потому что они могут содержать пробелы.


person Christopher McAtackney    schedule 11.09.2008    source источник


Ответы (5)


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

Что-то вроде этого:

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

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

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

person ibz    schedule 11.09.2008

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

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

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

person swissunix    schedule 02.02.2010

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

select 'test"columnname"' from dual

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

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

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

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

person JosephStyons    schedule 11.09.2008

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

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

person EvilTeach    schedule 16.09.2008

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

person Artem    schedule 23.09.2013