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

StackOverflow https://stackoverflow.com/questions/56591

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Система, над которой я работаю, создает динамическую строку 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.

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

select 'test"columnname"' from dual

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

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

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

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

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

мой $quotedString = $dbh->quote($string);

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top