Хранимая процедура FireBird

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Gurt87
Сообщения: 4
Зарегистрирован: 27 янв 2010, 13:41

Хранимая процедура FireBird

Сообщение Gurt87 » 27 янв 2010, 13:51

Помогите с написание хранимой процедуры....
Никогда не писал их..

Ее смысл:

удаляет все таблицы в БД с именем которое начинается на TT (то есть TT%)
TT - передается как параметр.

Думаю кто с этим имел дело, тому не составит большого труда...

Заранее благодарен...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Хранимая процедура FireBird

Сообщение WildSery » 27 янв 2010, 14:51

Из процедуры нельзя менять метаданные, в общем случае.
Процедура - это работа с данными.

Метаданные меняет клиент, ну или "среднее звено".
А в правильно спроектированных системах - никто и никогда не меняет метаданные.

Gurt87
Сообщения: 4
Зарегистрирован: 27 янв 2010, 13:41

Re: Хранимая процедура FireBird

Сообщение Gurt87 » 27 янв 2010, 14:57

WildSery писал(а):Из процедуры нельзя менять метаданные, в общем случае.
Процедура - это работа с данными.

Метаданные меняет клиент, ну или "среднее звено".
А в правильно спроектированных системах - никто и никогда не меняет метаданные.
Ну а как по другому мне реализовать это удаление?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Хранимая процедура FireBird

Сообщение kdv » 27 янв 2010, 18:14

Ну а как по другому мне реализовать это удаление?
никак. вернее как обычно. выполнением sql из приложения, причем, поскольку это ddl, корректно обрамленного транзакциями.

Massa
Сообщения: 4
Зарегистрирован: 30 янв 2010, 03:54

Re: Хранимая процедура FireBird

Сообщение Massa » 30 янв 2010, 04:02

kdv,
Нехорошо обманывать.
Посоветовать использовать 'execute statement' - религия не позволяет ?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Хранимая процедура FireBird

Сообщение kdv » 30 янв 2010, 13:33

Нехорошо обманывать.
Посоветовать использовать 'execute statement' - религия не позволяет ?
execute statement не предназначен для выполнения DDL. Может Вы не знаете, но возможность выполнять в нем DDL была корректная только для grant. Весь остальной ddl в ES выполнять крайне не рекомендуется, потому что манипуляции с метаданными должны происходить в коротких транзакциях, что при ES соблюсти не удастся (с автономными транзакциями в 2.5? может быть...), и проблема не только в этом.

То есть, я таких советов не даю. И мне проще ответить "нет", чем дать человеку (тем более новичку) в руки гранату, на которой он тут же подорвется, причем гарантированно.
А Вы, подозреваю, из любителей советовать то, что сами не пробовали? :twisted: Или дайте ему готовый код.

Massa
Сообщения: 4
Зарегистрирован: 30 янв 2010, 03:54

Re: Хранимая процедура FireBird

Сообщение Massa » 30 янв 2010, 14:26

kdv, Вы зря кипятитесь.
Если Вы не хотите давать новичку гранату - не значит , что ее нет.
Пусть лучше "подорвется" в начале пару раз.
Я-то сам не практикую такие вещи, но если нужен код - пожалуйста.

Код: Выделить всё

create or alter  procedure drop_tables (
    prefix varchar(10)
)
as
declare table_name varchar(31) ;
begin
    for
        select
            a.rdb$relation_name
        from
            rdb$relations a
        where
            a.rdb$system_flag = 0
            and a.rdb$view_blr is null
            and a.rdb$relation_name starting upper(:prefix)
        into :table_name
    do
    begin
        execute statement 'drop table '||:table_name ;
    end
end

Massa
Сообщения: 4
Зарегистрирован: 30 янв 2010, 03:54

Re: Хранимая процедура FireBird

Сообщение Massa » 30 янв 2010, 14:48

Я не сторонник управления схемой с помощью хранимых процедур и не любитель советовать ,
но, думаю , Вы согласитесь , что предложенный код - то что хотел ТС.
Или не согласны , уважаемый kdv ?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Хранимая процедура FireBird

Сообщение kdv » 30 янв 2010, 16:20

да ради бога.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Хранимая процедура FireBird

Сообщение WildSery » 05 фев 2010, 16:25

Massa писал(а):Я не сторонник управления схемой с помощью хранимых процедур и не любитель советовать ,
но, думаю , Вы согласитесь , что предложенный код - то что хотел ТС.
Или не согласны , уважаемый kdv ?
Уважаемый, а вы всегда стараетесь дать вопрошающему ответ, который он хотел, даже если просит откровенную х..ню?
Если так, то вы злой человек, и вообще садист, наверное.

ЗЫ: Я сам себе собрался аппендицит вырезать, книжку по анатомии уже изучил. Посоветуйте, как правильно стерилизовать скальпель?

Massa
Сообщения: 4
Зарегистрирован: 30 янв 2010, 03:54

Re: Хранимая процедура FireBird

Сообщение Massa » 05 фев 2010, 20:47

WildSery,
Ну, тут все просто - сначала покупаете бутылку водки и выпиваете залпом,так сакзать, стерилизуете
внутренние органы (вместе с аппендицитом). Потем берете скальпель ...
... желание самоистязатьсо к этому времени должно пройти. Вот и все. :)

Ответить