Часть полного текста документа:Некоторые черты SQL/92 и SQL-3 Оператор выделения памяти под дескриптор ::= ALLOCATE DESCRIPTOR [WITH MAX ] ::= ::= (] ::= GLOBAL | LOCAL ::= ( ( Комментарий: Дескриптор, это динамически выделяемая часть памяти прикладной программы, служащая для принятия информации о результате или параметрах динамически подготовленного оператора SQL или задания параметров такого оператора. Смысл того, что для выделения памяти используется оператор SQL, а не просто стандартная функция alloc или какая-нибудь другая функция динамического запроса памяти, состоит в том, что прикладная программа не знает структуры дескриптора и даже его адреса. Это позволяет не привязывать SQL к особенностям какой-либо системы программирования или ОС. Все обмены информацией между собственно прикладной программой и дескрипторами производятся также с помощью специальных операторов SQL (GET и SET, см. ниже). Второй вопрос: зачем вообще выделять память под дескрипторы динамически. Это нужно потому, что в общем случае прикладная программа, использующая динамический SQL, не знает в статике число одновременно действующих динамических операторов SQL, описание которых может потребоваться. С этим же связано то, что имя дескриптора может задаваться как литеральной строкой символов, так и через строковую переменную включающего языка, т.е. его можно генерировать во время выполнения программы. В операторе ALLOCATE DESCRIPTOR, помимо прочего, может указываться число описательных элементов, на которое он рассчитан. Если, например, при выделении памяти под дескриптор в разделе WITH MAX указано целое положительное число N, а потом дескриптор используется для описания M (M>N) элементов (например, M столбцов результата запроса), то это приводит к возникновению исключительной ситуации. Оператор освобождения памяти из-под дескриптора ::= DEALLOCATE DESCRIPTOR Комментарий: Выполнение этого оператора приводит к освобождению памяти из-под ранее выделенного дескриптора. После этого использование имени дескриптора незаконно в любом операторе, кроме ALLOCATE DESCRIPTOR. Оператор получения информации из области дескриптора SQL ::= GET DESCRIPTOR ::= ( VALUE ({ }...] ::= COUNT ::= ::= ::= ::= ::= TYPE ( LENGHT ( OCTET_LENGHT ( RETURNED_LENGHT ( RETURNED_OCTET_LENGHT ( PRECISION ( SCALE ( DATETIME_INTERVAL_CODE ( DATATIME_INTERVAL_PRECISION ( NULLABLE ( INDICATOR ( DATA ( NAME ( UNNAMED ( COLLATION_CATALOG ( COLLATION_SCHEMA ( COLLATION_NAME ( CHARACTER_SET_CATALOG ( CHARACTER_SET_SCHEMA ( CHARACTER_SET_NAME ::= ( Комментарий: Оператор GET DESCRIPTOR служит для выборки описательной информации, ранее размещенной в дескрипторе с помощью оператора DESCRIBE. За одно выполнение оператора можно получить либо число заполненных элементов дескриптора (COUNT), либо информацию, содержащуюся в одном из заполненных элементов. Оператор установки дескриптора ::= SET DESCRIPTOR ::= ( VALUE [{ }...] ::= COUNT ::= ::= ::= ::= Комментарий: Оператор SET DESCRIPTOR служит для заполнения элементов дескриптора с целью его использования в разделе USING. За одно выполнение оператора можно поместить значение в поле COUNT (число заполненных элементов), либо частично или полностью сформировать один элемент дескриптора. Оператор подготовки ::= PREPARE FROM ::= ::= | | | | ::= | | | | | | ::= ::= ::= ::= ::= ::= | ::= [scope option] ::= [] [] ::= FOR { READ ONLY | UPDATE [ OF ] } ::= | ::= SELECT [] ::= DISTINCT | ALL Комментарий: Оператор PREPARE вызывает компиляцию и построение плана выполнения заданного в текстовой форме оператора SQL. ............ |