Введение в стандарты языка баз данных SQL




Встроенный SQL - часть 2


Пояснения:

  • Программа на языке Си со встроенным SQL - это единица компиляции, состоящая из текстов на языках Си и SQL. Си-текст должен соответствовать стандарту ISO/IEC 9899. SQL-текст должен состоять из одного или более встроенных операторов SQL и, возможно, из одной или более секций объявления SQL.
  • Встроенный оператор SQL может содержаться в любом месте программы, в котором может содержаться Си-оператор внутри блока функции. Если перед Си-оператором в этом месте может присутствовать метка, то она может быть поставлена и перед встроенным оператором SQL.
  • В Си-программе со встроенным SQL Си-идентификатор (Chostidentifier) - это любой допустимый в языке Си идентификатор переменной.
  • Определение Си-переменной (Cvariabledefinition) определяет одну или более переменных языка Си и модифицируется следующим образом:

      (a) любая необязательная спецификация CHARACTERSET удаляется из определения <CVARCHARvariable> или <Ccharactervariable>;

      (b) в любом объявлении символьной переменной "VARCHAR" заменяется на "char";

      (c) в любом объявлении битовой переменной "BIT" заменятся на "char";

      (d) длина (length), указанная в спецификации массива при объявлении битовой переменной, заменяется на значение, равное наименьшему целому, ближайшему к L/B (см. ниже);

      (e) длина, указанная в спецификации массива при объявлении символьной переменной (постоянной или переменной длины), содержащего спецификацию CHARACTERSET, заменяется на длину в октетах соответствующего Си-идентификатора.

  • Последовательность представления символа (characterrepresentation), содержащаяся в начальном Си-значении, присваиваемом Си-переменной, должна быть допустимой Си-спецификацией начального значения.
  • За исключением случаев спецификации массива для символьных и битовых строк, объявление Си-переменной должно ссылаться на скалярный тип.
  • При объявлении Си-переменной в ключевых словах "VARCHAR", "CHARACTER", "SET", "IS", "BIT" и "VARYING" может использоваться произвольная комбинация малых и заглавных букв.
  • Каждый Си-идентификатор, указанный в определении символьной Си-переменной постоянной длины, описывает символьную строку постоянной длины; эта длина задается значением <length> в соответствующей спецификации массива; значение переменной заканчивается пустым символом, позиция которого включается в заданную длину; эквивалентный тип данных SQL есть CHARACTER с длиной на единицу меньше <length> и со значением, не включающим пустой символ; значение <length> должно быть больше единицы 1.
  • Каждый Си-идентификатор, указанный в определении строчной Си-переменной переменной длины, описывает символьную строку переменной длины; максимальная длина задается значением <length> в соответствующей спецификации массива; значение переменной заканчивается пустым символом, позиция которого включается в заданную максимальную длину; эквивалентный тип данных SQL есть CHARACTERVARYING с длиной на единицу меньше <length> и со значением, не включающим пустой символ; значение <length> должно быть больше единицы 1.
  • Каждый Си-идентификатор, указанный в определении битовой Си-переменной, описывает битовую строку постоянной длины; пусть B - длина в битах значения типа языка Си "char", а L - значение <length> в соответствующей спецификации массива, тогда длина эквивалентной символьной Си-переменной есть наименьшее целое, не меньшее значения L/B; эквивалентный тип SQL есть BIT с длиной L.
  • Тип данных "long" Си-переменной эквивалентен типу INTEGER языка SQL.
  • Тип данных "short" Си-переменной эквивалентен типу SMALLINT языка SQL.
  • Тип данных "float" Си-переменной эквивалентен типу REAL языка SQL.
  • Тип данных "double" Си-переменной эквивалентен типу DOUBLEPRECISION языка SQL.
  • Если Си-программа со встроенным SQL не содержит определения Си-переменной SQLSTATE в виде символьной переменной постоянного размера с указанием длины массива, равной 6, или в виде переменной типа "long", то предполагается наличие такой переменной с типом "long".



  • Содержание  Назад  Вперед