Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.051 c
2-1132085325
MRAk
2005-11-15 23:08
2005.12.04
Fs.free


14-1131976482
oldman
2005-11-14 16:54
2005.12.04
Возможно баян...


1-1131475324
тт
2005-11-08 21:42
2005.12.04
Как быстро заполнить таблицу word значениями?


3-1129836987
lra
2005-10-20 23:36
2005.12.04
выборка заданного количества записей с помощью sql-запроса


6-1125267910
desam_
2005-08-29 02:25
2005.12.04
PHP и Delphi