Spec-Zone.ru › Tcl/Tk

tdbc_statement

ИМЯ
tdbc::statement — Объект оператора TDBC
СИНТАКСИС
ОПИСАНИЕ
направление
тип
точность
размерность
может содержать NULL
ПРИМЕРЫ
СМОТРИТЕ ТАКЖЕ
КЛЮЧЕВЫЕ СЛОВА
АВТОРСКИЕ ПРАВА

Имя

tdbc::statement — Объект оператора TDBC

Синтаксис

package require tdbc 1.0
package require tdbc::версия драйвера

tdbc::драйвер::connection create db ?-option значение...?

set stmt [db prepare код SQL]
set stmt [db preparecall вызов]

$stmt params
$stmt paramtype ?направление? тип ?точность? ?размерность?
$stmt execute ?словарь?
$stmt resultsets
$stmt allrows ?-as списки|словари? ?-columnsvariable имя? ?--? ?словарь
$stmt foreach ?-as списки|словари? ?-columnsvariable имя? ?--? имяПеременной ?словарь? скрипт
$stmt close

Описание

Каждый драйвер базы данных для TDBC (Tcl DataBase Connectivity) реализует объект statement, который представляет оператор SQL в базе данных. Экземпляры этого объекта создаются путем выполнения команды объекта prepare или preparecall на подключении к базе данных.

Команда объекта prepare в отношении подключения принимает произвольный код SQL, который должен быть выполнен в базе данных. Код SQL может содержать связанные переменные, которые являются строками буквенно-цифровых символов или подчеркиваний (первый символ строки не может быть числовым), префикс которых — двоеточие (:). Если связанная переменная появляется в операторе SQL и не находится в строке, заключенной в одинарные или двойные кавычки, или в комментарии, введенном с помощью --, она становится значением, которое подставляется при выполнении оператора. Связанная переменная становится единственным значением (строкой или числом) в результирующем операторе. Драйверы несут ответственность за обеспечение того, что механизм связывания переменных предотвращает SQL-инъекции.

Команда объекта preparecall в отношении подключения принимает стилизованный оператор в формате:

procname (?:varname? ?,:varname...?)

или

varname = procname (?:varname? ?,:varname...?)

Этот оператор представляет вызов хранимой процедуры procname в базе данных. Имя переменной слева от знака равенства (если он присутствует), а также все имена переменных, являющиеся параметрами внутри скобок, становятся связанными переменными.

Метод params объекта оператора перечисляет связанные переменные, которые появляются в операторе. Результат, возвращаемый методом params, представляет собой словарь, ключами которого являются имена связанных переменных (перечисленные в порядке первого появления переменных в операторе), а значениями — словари. Подсловари включают по меньшей мере следующие ключи (драйверы баз данных могут добавлять дополнительные ключи, которые не указаны в этом списке).

направление
Содержит одно из ключевых слов, in, out или inout в зависимости от того, является ли переменная входом или выходом для оператора. Только вызовы хранимых процедур будут иметь параметры out или inout.
тип
Содержит тип данных столбца и обычно выбирается из набора bigint, binary, bit, char, date, decimal, double, float, integer, longvarbinary, longvarchar, numeric, real, time, timestamp, smallint, tinyint, varbinary и varchar. (Если тип переменной не может быть представлен одним из вышеперечисленных, type будет содержать описание типа, зависящее от драйвера.)
точность
Содержит точность столбца в битах, десятичных разрядах или ширину в символах в соответствии с типом.
размерность
Содержит размерность столбца (количество цифр после десятичной точки) для типов, которые поддерживают это понятие.
может содержать NULL
Содержит 1, если столбец может содержать значения NULL, и 0 в противном случае.

Команда объекта paramtype позволяет скрипту указать тип и направление передачи параметра переменной в операторе. (Некоторые базы данных не предоставляют метода для автоматического определения этой информации и возлагают на вызывающую сторону задачу сделать это.) Аргументы направление, тип, точность, размерность и может содержать NULL имеют то же значение, что и соответствующие значения словаря в команде объекта params.

Команда объекта execute выполняет оператор. Перед выполнением оператора предоставляются значения для связанных переменных, которые в нем встречаются. Если параметр словарь задан, он проверяется на наличие ключа, имя которого соответствует имени связанной переменной. Если ключ присутствует, его значение становится подставленной переменной. Если нет, значение подставленной переменной становится SQL NULL. Если параметр словарь не задан, команда объекта execute ищет переменную в области вызывающей стороны, имя которой соответствует имени связанной переменной. Если она найдена, ее значение становится значением связанной переменной. Если не найдена, связанной переменной присваивается значение SQL NULL. После завершения подстановки результирующий оператор выполняется. Значение возврата — объект набора результатов (см. tdbc::resultset для подробностей).

Метод resultsets возвращает список всех наборов результатов, которые были возвращены оператором и которые еще не закрыты.

Команда объекта allrows выполняет оператор, как с командой объекта execute, принимая необязательный параметр словарь, предоставляющий связанные переменные. После выполнения оператора она использует команду объекта allrows в наборе результатов (см. tdbc::resultset) для построения списка результатов. Наконец, набор результатов закрывается. Значение возврата — список результатов.

Команда объекта foreach выполняет оператор, как с командой объекта execute, принимая необязательный параметр словарь, предоставляющий связанные переменные. После выполнения оператора она использует команду объекта foreach в наборе результатов (см. tdbc::resultset) для оценки заданного скрипта для каждой строки результатов. Наконец, набор результатов закрывается, даже если заданный скрипт приводит к return, ошибке или необычному коду возврата.

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

Примеры

Следующий код выполнит поиск телефонного номера в справочнике, предполагая соответствующую схему SQL:
package require tdbc::sqlite3
tdbc::sqlite3::connection create db phonebook.sqlite3
set statement [db prepare {
    select phone_num from directory
    where first_name = :firstname and last_name = :lastname
}]
set firstname Fred
set lastname Flintstone
$statement foreach row {
    puts [dict get $row phone_num]
}
$statement close
db close

См. также

encoding, tdbc, tdbc::connection, tdbc::resultset, tdbc::tokenize

Авторские права

Авторские права (c) 2008 г. Кевина Б. Кенни.

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TdbcCmd/tdbc_statement.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TdbcCmd/tdbc_statement.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API