Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1130325473
Сергей1981
2005-10-26 15:17
2005.12.04
Чтение файлов MSWord


2-1132403254
Oni
2005-11-19 15:27
2005.12.04
Перевести значение из BCD в integer


3-1129701482
Smolin
2005-10-19 09:58
2005.12.04
Очередность выполнения SQL запросов


14-1131519250
Antonn
2005-11-09 09:54
2005.12.04
Антивирь считает мой проект вирусом:)


3-1129697892
Liavik
2005-10-19 08:58
2005.12.04
longtime в accsess &delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский