13.5.1 Заявление PREPARE
PREPARE stmt_name FROM preparable_stmt
Заявление PREPARE подготавливает SQL-запрос и присваивает ему имя, stmt_name, для последующего обращения к этому запросу. Подготовленное заявление выполняется с помощью EXECUTE и освобождается с помощью DEALLOCATE PREPARE. Примеры см. в Разделе 13.5, «Подготовленные запросы».
Имена заявлений нечувствительны к регистру. preparable_stmt является либо строковой литеральной, либо пользовательской переменной, содержащей текст SQL-запроса. Текст должен представлять собой одно заявление, а не несколько. Внутри заявления можно использовать ? символы в качестве маркеров параметров, чтобы указать места, где данные будут связаны с запросом позже при его выполнении. Символы ? не должны быть заключены в кавычки, даже если вы намерены связать их со строковыми значениями. Маркеры параметров можно использовать только там, где должны появляться данные, а не для SQL-ключевых слов, идентификаторов и т. д.
Если уже существует подготовленное заявление с заданным именем, оно неявно освобождается перед подготовкой нового заявления. Это означает, что если новое заявление содержит ошибку и не может быть подготовлено, возвращается ошибка, и никакое заявление с данным именем не существует.
Область действия подготовленного заявления — сессия, в которой оно создано, что имеет несколько последствий:
Подготовленное заявление, созданное в одной сессии, недоступно для других сессий.
Когда сессия завершается, независимо от того, нормально или аномально, её подготовленные заявления больше не существуют. Если включено автоматическое подключение, клиент не получает уведомления о том, что соединение было потеряно. По этой причине клиенты могут захотеть отключить автоматическое подключение. См. .
Подготовленное заявление, созданное в рамках хранимой программы, продолжает существовать после завершения выполнения программы и может быть выполнено вне программы позже.
Заявление, подготовленное в контексте хранимой программы, не может ссылаться на параметры хранимых процедур или функций или локальные переменные, потому что они выходят за пределы области видимости после завершения программы и не будут доступны при последующем выполнении заявления вне программы. В качестве обходного пути используйте вместо этого пользовательские переменные, которые также имеют область действия сессии; см. Раздел 9.4, «Пользовательские переменные».
© 2025 Oracle
Licensed under the GPLv2 License.