Другие замечания
-
Набор символов, используемый для внешнего соединения, совпадает с используемым набором для текущего соединения.
-
Двухфазные транзакции не поддерживаются.
Набор символов, используемый для внешнего соединения, совпадает с используемым набором для текущего соединения.
Двухфазные транзакции не поддерживаются.
Необязательные предложения AS USER
, PASSWORD
и ROLE
позволяют указывать от имени какого пользователя, и с какой ролью будет выполняться SQL оператор.То, как авторизуется пользователь и открыто ли отдельное соединение, зависит от присутствия и значений параметров ON EXTERNAL [DATA SOURCE]
, AS USER
, PASSWORD
и ROLE
.
При использовании предложения ON EXTERNAL
открывается новое соединение и:
Если присутствует, по крайней мере, один из параметров AS USER
, PASSWORD
и ROLE
, то будет предпринята попытка нативной аутентификации с указанными значениями параметров (в зависимости от строки соединения — локально или удалённо). Для недостающих параметров не используются никаких значений по умолчанию;
Если все три параметра отсутствуют, и строка подключения не содержит имени сервера (или IP адреса), то новое соединение устанавливается к локальному серверу с пользователем и ролью текущего соединения. Термин 'локальный' означает 'компьютер, где установлен сервер Firebird'. Это совсем не обязательно компьютер клиента;
Если все три параметра отсутствуют, но строка подключения содержит имя сервера (или IP адреса), то будет предпринята попытка доверенной (trusted) авторизации к удалённому серверу. Если авторизация прошла, то удалённая операционная система назначит пользователю имя — обычно это учётная запись, под которой работает сервер Firebird.
Если предложение ON EXTERNAL
отсутствует:
Если присутствует, по крайней мере, один из параметров AS USER
, PASSWORD
и ROLE
, то будет открыто соединение к текущей базе данных с указанными значениями параметров. Для недостающих параметров не используются никаких значений по умолчанию;
Если все три параметра отсутствуют, то оператор выполняется в текущем соединении.
Important
|
Если значение параметра |
Не существует способа проверить синтаксис выполняемого SQL оператора;
Нет никаких проверок зависимостей для обнаружения удалённых столбцов в таблице или самой таблицы;
Выполнение оператора с помощью оператора EXECUTE STATEMENT
значительно медленнее, чем при непосредственном выполнении;
Возвращаемые значения строго проверяются на тип данных во избежание непредсказуемых исключений преобразования типа. Например, строка '1234' преобразуется в целое число 1234, а строка 'abc' вызовет ошибку преобразования.
В целом эта функция должна использоваться очень осторожно, а вышеупомянутые факторы всегда должны приниматься во внимание.Если такого же результата можно достичь с использованием PSQL и/или DSQL, то это всегда предпочтительнее.
FOR SELECT
Цикл по строкам результата выполнения оператора SELECT
.
PSQL
[label:] FOR <select_stmt> [INTO <variables>] [AS CURSOR cursorname] DO <compound_statement> <variables> ::= [:{endsb}varname [, [:{endsb}varname ...]
Параметр | Описание |
---|---|
label |
Необязательная метка для |
select_stmt |
Оператор |
cursorname |
Имя курсора.Должно быть уникальным среди имён переменных и курсоров PSQL модуля. |
varname |
Имя локальной переменной или входного/выходного параметра. |
compound_statement |
Составной оператор (оператор или блок операторов). |
Оператор FOR SELECT
выбирает очередную строку из таблицы (представления, селективной хранимой процедуры), после чего выполняется составной оператор.В каждой итерации цикла значения полей текущей строки копируются в локальные переменные.Добавление предложения AS CURSOR
делает возможным позиционное удаление и обновление данных.Операторы FOR SELECT
могут быть вложенными.
Оператор FOR SELECT
может содержать именованные параметры, которые должны быть предварительно объявлены в операторе DECLARE VARIABLE
, или во входных (выходных) параметрах процедуры (PSQL блока).
Оператор FOR SELECT
должен содержать предложение INTO
, которое располагается в конце этого оператора, или предложение AS CURSOR
.На каждой итерации цикла в список переменных указанных в предложении INTO
копируются значения полей текущей строки запроса.Цикл повторяется, пока не будут прочитаны все строки.После этого происходит выход из цикла.Цикл также может быть завершён до прочтения всех строк при использовании оператора LEAVE
.