Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Открыть новую тему     Написать ответ в эту тему

JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hi All
А как изменить скрипт что бы не вызывало исключение когда  Таблицы нет
DROP table BAD_DRUGS;
 
/* Вот пример нашел но не робит*/
 
if (exists(select * from rdb$relations where RDB$RELATION_NAME = 'BAD_DRUGS')) then
  execute statement 'drop table BAD_DRUGS;
 
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 1.
if.
 
/*   И так  не робит */
 
IF (select count(*) from rdb$relations WHERE RDB$RELATION_NAME = 'BAD_DRUGS')>0
then DROP TABLE BAD_DRUGS;
 
 
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 1.
IF.
 
З.Ы.    КАк  меня за..ли эти все  загадки  
 
 
Добавлено:
О В ротМнеНоги !!!  РАботает токо так
 
    create or alter  procedure drop_tables (
        prefix varchar(50)
    )
    as
    declare table_name varchar(31) ;
    begin
        for
            select  rdb$relation_name
            from  rdb$relations
            where  upper(rdb$relation_name) = upper(:prefix)
            into :table_name
        do
        begin
            execute statement 'drop table '||:table_name ;
        end
    end

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 07:54 01-03-2010 | Исправлено: JohnSilver182, 08:15 01-03-2010
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
/*   И так  не робит */
 
IF (select count(*) from rdb$relations WHERE RDB$RELATION_NAME = 'BAD_DRUGS')>0
then DROP TABLE BAD_DRUGS;
 
 
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 1.
IF.
 
З.Ы.    КАк  меня за..ли эти все  загадки  

используй блоки

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 10:17 01-03-2010
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11  Непонял.
IF  .. THEN только в составе процедуры\вида  может выполняться ???
 

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 12:33 01-03-2010
and23

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2JohnSilver182: И в триггерах. В FB начиная с, если не ошибаюсь, 2.0, ещё в EXECUTE BLOCK, о чём и сказал X11. Судя по EXECUTE STATEMENT, этот вариант Вам должен подойти.

Всего записей: 567 | Зарегистр. 10-09-2003 | Отправлено: 16:09 01-03-2010
RedPromo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Также IF  .. THEN и в составе  
EXECUTE BLOCK
Функция позволяет выполнять набор PSQL команд без создания процедуры.  
Поддерживает как входные так и выходные параметры.

Всего записей: 558 | Зарегистр. 05-04-2006 | Отправлено: 23:27 02-03-2010
tyghr



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите, плз, со скриптом, я хочу создать процедуру, которая правит события
(исправляет опоздания )
 

Код:
 
CREATE PROCEDURE UPDATE_991 (
    in_wrong_time time,
    wr_second smallint,
    wr_minute smallint,
    wr_hour smallint)
as
begin
    select reg_events.time_ev from reg_events where ((reg_events.TIME_EV > '9:00:00') AND (reg_events.TIME_EV < '11:00:00')) AND
        (reg_events.TYPE_DEPEND = 1) AND
        (reg_events.CATEGORY_EV = 2) AND
        (reg_events.STAFF_ID = 991) AND
        (reg_events.date_ev = (select current_date from rdb$database))
        into :IN_WRONG_TIME;
    wr_hour=8;
    wr_minute=EXTRACT(MINUTE FROM IN_WRONG_TIME);
    wr_second=EXTRACT(SECOND FROM IN_WRONG_TIME);
    if ((round1(wr_minute/10)*10)>wr_minute)
        then wr_minute=50+wr_minute-(round1(wr_minute/10)*10)-10;
        else wr_minute=50+wr_minute-(round1(wr_minute/10)*10);
    IN_WRONG_TIME=cast( wr_hour || ':' || wr_minute || ':' || wr_second as TIME);
 
    UPDATE reg_events SET
        reg_events.time_ev=IN_WRONG_TIME
        WHERE ((reg_events.TIME_EV > '9:00:00') AND (reg_events.TIME_EV < '11:00:00')) AND
        (reg_events.TYPE_DEPEND = 1) AND
        (reg_events.CATEGORY_EV = 2) AND
        (reg_events.STAFF_ID = 991) AND
        (reg_events.date_ev = (select current_date from rdb$database));
    UPDATE tabel_intermediadate SET
        tabel_intermediadate.time_pass=IN_WRONG_TIME
        WHERE ((tabel_intermediadate.time_pass > '9:00:00') AND (tabel_intermediadate.time_pass < '11:00:00')) AND
        (tabel_intermediadate.type_pass = 1) AND
        (tabel_intermediadate.STAFF_ID = 991) AND
        (tabel_intermediadate.date_pass = (select current_date from rdb$database));
  suspend;
end
 

 
она ругается на строку после UPDATA ...
вот на эту :    reg_events.time_ev=IN_WRONG_TIME
пишет что column wrong
 
сильно не ругайте на синтаксис, я в sql первый раз пишу

Всего записей: 89 | Зарегистр. 14-03-2007 | Отправлено: 11:01 04-03-2010
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tyghr
Оно говорит что поля IN_WRONG_TIME нет в таблице reg_events. Нужно спереди поставить две точки.

Код:
 
UPDATE reg_events SET
  reg_events.time_ev = :IN_WRONG_TIME
  ...
 

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 11:24 04-03-2010
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hi All
А как можно удалить неубиваемые INDEX-ы (они еще красным подсвеченны ) ????
 

Цитата:
This operation is not defined for system tables.
unsuccessful metadata update.
Index not found.

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 10:25 22-03-2010
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А как можно удалить неубиваемые INDEX-ы (они еще красным подсвеченны ) ????

Глядя на свой хрустальный шар вижу что подсвечены они в IBExpert'е и являются primary key/foreign key/unique constraint . Вот их и надо удалять.

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 10:53 22-03-2010
Odysseos



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JohnSilver182
 
Если имеются в виду индексы с именами вида RDB$INDEX_n - то это индексы на системные таблицы, описывающие схему данных. И удалять эти индексы не стоило бы, даже если бы было можно.

Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 11:09 22-03-2010
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А если есть генератор, привязанный к первичному ключу, то в первую очередь нужно удалить генератор.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:16 22-03-2010
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
О !  Зашел с свойства Индекса этого странного  . Нашел свою USER TABLE .  Удалил у нее PRIMARY KEY   Исчезло после Переконнекта !!!!
 
Добавлено:
Кстати в IB_EXPERT  когда заходиш в : Свойство Таблицы->Logging . Он предлагает создать всякие системные таблицы ,  которые хрен потом удалиш , даже  если Генераторы удалить .
 
А зачем это  надо ???

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 11:40 22-03-2010 | Исправлено: JohnSilver182, 11:48 22-03-2010
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что именно надо?? Запрет на удаление или таблицы логирования?
Если зачем нужны таблицы логирования, то они предназначены для просмотра всех изменение метаданных.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:00 22-03-2010
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11 А !! Тоесть на каждую USER TABLE можно повесить событие , которое пишется в  
 RDB$LOG (Если менялась структура таблицы )???  

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 12:04 22-03-2010 | Исправлено: JohnSilver182, 12:05 22-03-2010
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не знаю, я не вешал, но уверен, что оно таблицы логирования предназначены для логирования изменений в метаданных.

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:26 22-03-2010
Odysseos



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JohnSilver182
 
А !! Тоесть на каждую USER TABLE можно повесить событие , которое пишется в  
 RDB$LOG (Если менялась структура таблицы )???

 
Не совсем так - разработчику самому ничего никуда повесить будет нельзя, и ничего он в RDB$LOG не найдёт. Но IBExpert сам создаст некоторое количество таблиц с префиксом IBE$, в которые он будет записывать все изменения в метаданных, которые сделает разработчик.

Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 12:43 22-03-2010
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Odysseos ААААААА . Так таблицы  префиксом IBE$ таблицы  ни разу не системные .  

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 13:02 22-03-2010
Odysseos



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JohnSilver182
 
Они не системные - но также и не участвуют в схеме данных создаваемой БД, и используются только самим IBExpert'ом, потому удалить их при ненадобности этого функционала можно без опасений.

Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 14:58 22-03-2010
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11

Цитата:
Если зачем нужны таблицы логирования, то они предназначены для просмотра всех изменение метаданных.

Не для метаданных, для данных.
JohnSilver182
Создаются 4 таблицы
 IBE$LOG_TABLES
 IBE$LOG_KEYS
 IBE$LOG_FIELDS
 IBE$LOG_BLOB_FIELDS.
 
 
 
Добавлено:

Цитата:
Они не системные - но также и не участвуют в схеме данных создаваемой БД, и используются только самим IBExpert'ом

Ну почему же, очень даже используются  отдельными ленивыми разработчиками

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 16:03 22-03-2010
Odysseos



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OXDBA
 
Ну почему же, очень даже используются  отдельными ленивыми разработчиками
 
Ну, этак можно и на таблицы RDB$... ссылаться Но зачем выдумывать себе такой изощрённый геморрой?

Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 17:37 22-03-2010
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru