Моя сохраненная функция исчезла, предположительно, в конце сеанса RazorSQL - PullRequest
2 голосов
/ 19 мая 2011

Я использовал окно сеанса RazorSQL для создания и редактирования нескольких хранимых процедур.

С тех пор я отключился от базы данных и снова подключился, и теперь эти процедуры исчезли.

Предположительно, я облажался здесь, но я использую логин, у которого есть разрешение на создание этих процедур, и хотя я все еще подключен в первый раз, я действительно могу подключиться и выполнить хранимые процедуры, так что я знаю, они по крайней мере там в тот момент.

Что еще мне нужно сделать в RazorSQL, чем написать рабочий блок "CREATE FUNCTION", чтобы функция стала постоянной?

1 Ответ

2 голосов
/ 20 мая 2011

В Informix почти все операторы SQL, как DDL, так и DML, подвержены транзакциям (исключение составляют CREATE DATABASE, DROP DATABASE и RENAME DATABASE).

Существует несколько типов баз данных в Informix - ключевое отличие для текущей цели - между «MODE ANSI» и «logged» и «unlogged» базами данных.

  • База данных MODE ANSI всегда запускает транзакцию, когда вы выполняете оператор, такой как CREATE FUNCTION, и транзакция продолжается до тех пор, пока вы не ПОДТВЕРДИТЕ [WORK], ROLLBACK [WORK] или не завершите сеанс (что эквивалентно ROLLBACK).
  • Зарегистрированная база данных поддерживает транзакции, но каждый оператор является автономной транзакцией, если вы явно не запустили транзакцию с помощью BEGIN [WORK]. По сути, AutoCommit применяется до тех пор, пока вы не выполните НАЧАЛО РАБОТЫ.
  • Незагруженная база данных не поддерживает транзакции; каждый оператор является более или менее автономной транзакцией, в которой нет механизма для переопределения этого поведения.

Мне кажется, что наиболее вероятное объяснение того, что вы видели:

  • Вы (или RazorSQL) запустили транзакцию (явно с помощью BEGIN WORK или неявно в базе данных MODE ANSI) и вышли из нее до совершения транзакции, поэтому эффекты были откатаны.
...