Главная ]
2.15.Константные макросы типов данных SQL
Программирование
Базы данных



 

InterBase определяет набор макро констант для представления типов данных SQL и   NULL – состояния информации в XSQLVAR. Приложение должно использовать эти макро константы, для определения типов данных параметров и  типов данных элементов списка -select в инструкции SQL. Следующая таблица перечисляет каждый тип данных SQL, его соответствующее макро-константное выражение, тип данных C или тип данных определенный InterBase , и используется поле sqlind или нет, чтобы указать параметр или переменную, которая содержит NULL или неопределенные данные:

 

Тип данных            Макрос                                  Тип данных С                  использование sqlind

Array               SQL_ARRAY                                     ISC_QUAD                                       No

Array               SQL_ARRAY + 1                                ISC_QUAD                            Yes

Blob                 SQL_BLOB                                        ISC_QUAD                                       No

BLOB             SQL_BLOB + 1                                  ISC_QUAD                                       Yes

CHAR             SQL_TEXT                                        char[]                                                   No

CHAR             SQL_TEXT + 1                                  char[]                                                   Yes

DATE             SQL_DATE                                        ISC_DATE                                        No

DATE             SQL_DATE + 1                                  ISC_DATE                                        Yes

DECIMAL             SQL_SHORT, SQL_LONG,

SQL_DOUBLE, or SQL_INT64             int, long, double, or ISC_INT64             No

DECIMAL             SQL_SHORT + 1,

SQL_LONG + 1,

SQL_DOUBLE + 1,

or SQL_INT64 + 1                                 int, long, double, or ISC_INT64             Yes

DOUBLE

PRECISON             SQL_DOUBLE                                   double                                     No

DOUBLE

PRECISION             SQL_DOUBLE + 1                             double                                     Yes

 

INTEGER             SQL_LONG                                       long                                                      No

INTEGER             SQL_LONG + 1                                 ISC_LONG                                       Yes

FLOAT             SQL_FLOAT                                     float                                                     No

FLOAT             SQL_FLOAT + 1                               float                                                     Yes

NUMERIC             SQL_SHORT, SQL_LONG,

SQL_DOUBLE, or SQL_INT64             int, long, double, or ISC_INT64             No

NUMERIC      SQL_SHORT + 1,

SQL_LONG + 1,

SQL_DOUBLE + 1,

or SQL_INT64 + 1                               int, long, double, or ISC_INT64             Yes

SMALLINT             SQL_SHORT                                     short                                                    No

SMALLINT             SQL_SHORT + 1                               short                                                    Yes

TIME               SQL_TIME                                         ISC_TIME                                          No

TIME               SQL_TIME + 1                                  ISC_TIME                                          Yes

TIMESTAMP             SQL_TIMESTAMP                ISC_TIMESTAMP                             No

TIMESTAMP             SQL_TIMESTAMP + 1             ISC_TIMESTAMP                             Yes

VARCHAR             SQL_VARYING                                 Первые 2 байта: short содержащий

            длину символьной строки;

            хранит байты: char []                        No

VARCHAR             SQL_VARYING + 1                         Первые 2 байта: short содержащий

           длину символьной строки;

           хранит байты: char []                                    Yes

Примечание: DECIMAL и типы данных NUMERIC хранятся внутри БД как SMALLINT, INTEGER, DOUBLE PRECISION, или 64-разрядные целочисленные типы данных. Чтобы определить правильное макро выражение для  представления столбцов  DECIMAL или  NUMERIC, используйте isql, чтобы узнать определение столбца таблицы, и увидеть, как InterBase хранит данные столбца, а затем выбрать соответствующее макро выражение.

Информация о типе данных  параметра или элемента списка-select содержится в поле sqltype структуры XSQLVAR. Значение, содержащееся в sqltype предоставляет два вида информации:

  • Тип данных параметра или select-списка.

  • Используется ли sqlind для показа значения NULL. Если sqlind используется, его значение определяет, является ли параметр или элемент списка -select NULL (-1), или не NULL (0):

Например, если sqltype равняется SQL_TEXT, параметр или элемент списка -select  это CHAR, который не использует sqlind для проверки значения NULL (потому что  теоретически значения NULL не позволяются в этом случае). Если sqltype равняется SQL_TEXT + 1, то sqlind может быть проверен, чтобы увидеть, является ли параметр или элемент списка -select   NULL:

Выражение языка C, sqltype & 1, обеспечивает полезную проверку того, может ли параметр или элемент списка -select содержать NULL. Выражение равно 0, если параметр или элемент списка выбора не могут содержать NULL, и 1, если параметр или элемент списка выбора могут содержать NULL. Следующий фрагмент кода демонстрирует, как использовать это выражение:

if (sqltype & 1 == 0)

{

/* параметр не может содержать NULL */

}

else

{

/* параметр может содержать NULL*/

}

По умолчанию, и isc_dsql_prepare () и isc_dsql_describe () возвращают макро выражение type + 1, так что sqlind должен всегда проверяться на NULL  значения с этими инструкциями.  

<< Назад ] Содержание ] Далее >> ]

 

Дизайн: Piton Alien
Rambler's Top100 Рейтинг@Mail.ru
Сайт создан в системе uCoz