coldfusion - странность оракула - PullRequest
       7

coldfusion - странность оракула

3 голосов
/ 23 декабря 2009

Я вижу интересный результат, пытающийся использовать в качестве значения sys_guid () в Coldfusion 7.

Если я делаю

<cfquery>select sys_guid() as guid from dual</cfquery>

Возвращаемое значение guid рассматривается Coldfusion как двоичное поле.

Однако, если я сделаю

<cfquery>select sys_guid() || '' as guid from dual</cfquery>

Возвращаемое значение guid отображается в виде строки.

Я пробовал пару разных драйверов Oracle и Coldfusion / Macromedia, и все они реагируют одинаково. Последнее утверждение - то, что я использовал, таким образом я могу обработать руководства позже в коде, и работает отлично. Я надеюсь, что кто-то может объяснить, почему я получаю эти результаты.

1 Ответ

6 голосов
/ 23 декабря 2009

GUID - это 128-битные (16-байтовые) двоичные значения. Они не струны. Взгляните на документацию Oracle для sys_guid.

Ваша цель - работать с GUID в виде строк. Это означает, что каким-то образом вам нужно преобразовать значение GUID в строковое значение. Когда вы просто делаете select sys_guid() as guid from dual, тогда вы получаете 128-битное двоичное значение, как и ожидалось. Если вместо этого вы делаете select sys_guid() || '' as guid from dual, то сначала Oracle должен преобразовать 128-битное двоичное значение в строковое значение, прежде чем он сможет выполнить конкатенацию, потому что конкатенация работает только с двумя строковыми значениями. Oracle уже знает, как преобразовать двоичные значения в строковые значения, и выполнит это преобразование, если вы поместите двоичное значение там, где Oracle ожидает строковое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...