Форум: "Базы";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
ВнизIB Expert SQL Executive (как правильно написать скрипт?) Найти похожие ветки
← →
КиТаЯц © (2005-10-20 12:42) [0]Пишу:
set term ^;
begin
declare res integer;
begin
SELECT count(RDB$RELATION_NAME) FROM RDB$RELATIONS
WHERE (RDB$RELATION_NAME="TESTTABLE")
into res;
if (res = 0)
then
CREATE TABLE TESTTABLE (ID INTEGER);
end
end
^
set term ;^
/*Далее аналогично для следующей таблицы*/
Скрипт отрабатывать не хочет. IBExpert ругается чуть ли не на все строки. Идея такая: проверить есть ли в БД таблица (процедура etc.). Если нет - создать.
Базы локально (embeded) разных версий у разных пользователей. Сутуация будет (может) повторятся. Нужно для того, чтобы привести структуру БД к последней версии... и без всякого головняка - только выслав юзеру скриптовый файл.
Научите плиз криворукого как писать правильно. Спасибо.
← →
Zacho © (2005-10-20 12:49) [1]Смешивать DDL и DML операторы в одной транзакции крайне не рекомендуется. А в ХП и триггерах применять DDL вообще нельзя
← →
КиТаЯц © (2005-10-20 13:02) [2]
> Zacho © (20.10.05 12:49) [1]
Спасибо. И все-таки как написать на SQL правильно следующий скрипт:
если количество селектов из из системной таблицы больше нуля, то создать таблицу #1;
если количество селектов из из системной таблицы больше нуля, то создать таблицу #2;
и .т.д...
← →
Val © (2005-10-20 13:23) [3]Нужно для того, чтобы привести структуру БД к последней версии... и без всякого головняка - только выслав юзеру скриптовый файл.
зачем проверять? просто выполняйте создание таблиц в скрипте, если они уже есть, получите соотв. ошибку и таблицы не создадутся.
← →
Sergey13 © (2005-10-20 13:33) [4]2КиТаЯц © (20.10.05 12:42)
Ты по моему спутал скрипты и процедуры. В скриптах вроде не может быть логики. Это просто последовательность СКЛ-запросов.
Наверное стОит програмку для этого написать. В ней и анализируй все. Кроме того проверять просто наличие таблицы - это слишком топорно, ИМХО. Если там от нужного только название, то вряд ли что выйдет.
← →
Val © (2005-10-20 13:49) [5]>Sergey13 © (20.10.05 13:33)
В скриптах вроде не может быть логики. Это просто последовательность СКЛ-запросов.
уточню - для данного сервера.
← →
КиТаЯц © (2005-10-20 13:50) [6]
> Val © (20.10.05 13:23) [3]
В моем случае проверка нужна. Никак без нее.
> Sergey13 © (20.10.05 13:33) [4]
Возможно. Суть в следующем. Делал так:
- динамически креачу IBQuery - запихиваю возвращаемое значение в переменную - IBQuery уничтожаю.
- проверяю переменную - версия старая - креачу IBQuery - выполняю запрос (напр. создание таблицы) - удаляю IBQuery
Все это в одной процедуре код которой растянулся на туеву хучу строк...
Буквально вчера (!!!) только узнал, что у IBX есть обновление. Установил. И... Обнаружил компонент IBScript.
Во, думаю, кайф! Щас экзешник состряпаю и буду только скрипты подгружать. Ага, размечтался. Сразу уперся в проблемму, что НЕ МОГУ (или не умею или "в скриптах нет логики") на чистом SQL написать то, чего мне хочется...
← →
Desdechado © (2005-10-20 13:51) [7]я обычно делаю так (для всяких изврященных вариантов):
SET TERM ^ ;
CREATE PROCEDURE AAA
AS
BEGIN
IF( NOT EXISTS( SELECT RDB$RELATION_NAME FROM RDB$RELATIONS
WHERE RDB$RELATION_NAME="AA" ) ) THEN
EXECUTE STATEMENT "CREATE TABLE aa(ID INTEGER)";
END
^
SET TERM ; ^
EXECUTE PROCEDURE AAA;
DROP PROCEDURE AAA;
но это ПЛОХО
по стилю вижу, из Оракла попытки выполнения кодовых блоков - такого в IB нет
← →
Val © (2005-10-20 13:57) [8]>[6] КиТаЯц © (20.10.05 13:50)
можно привести причину суровой необходимости проверки в вашем случае?
← →
КиТаЯц © (2005-10-20 14:12) [9]
> Val © (20.10.05 13:57) [8]
Причина - НАДА. :)
Коротко не расскажеш. Хотя в эту сторону тоже подумаю. Если отказаться от проверок - то, теоретически, все должно получится.
> Desdechado © (20.10.05 13:51) [7]
Прошло "на ура" :) Почему это ПЛОХО? Чем грозит?
← →
Desdechado © (2005-10-20 15:21) [10]плохо выполнять DDL в процедурах
см.[1]
← →
Val © (2005-10-20 15:44) [11]+[10] Desdechado © (20.10.05 15:21)
по крайней мере, в IB, был счетчик на кол-во пересозданий объекта метаданных.
← →
Desdechado © (2005-10-20 15:49) [12]изменений
255 на объект
потом backup-restore только помогает
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c