Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как определить, имеется ли в базе данных определенная процедура? [D7, FireBird1.5]


pavel_guzhanov ©   (2007-02-15 10:02:00) 

Подскажите пожалуйста, как мне определить, есть в базе процедура с определенным именем, или ее там нет?
При помощи IBQuery запускаю процедуру Proc1

IBQuery.sql.add('Select * from Proc1');
IBQuery.Open;

Если процедуры в базе нет, то ее надо создать, если есть, то надо выполнить запрос.

Как определить ее наличие?


Desdechado   (2007-02-15 15:15:00) [1]

PEAKTOP ©   (15.02.07 15:08) [7]
Возможно, я до двойки не добрался, используем полторушку.


PEAKTOP   (2007-02-15 15:08:00) [2]

> Можно. Я часто делаю при обновлении БД служебные скрипты в виде "создать процедуру - выполнить - удалить", т.к. в  FB нет безымянных блоков кода на PSQL.


В Firebird v2.0 есть. EXECUTE BLOCK называется.


Desdechado   (2007-02-15 11:34:00) [3]

> А разве создать и выполнить процедуру в рамках одной сессии в IB можно?
Можно. Я часто делаю при обновлении БД служебные скрипты в виде "создать процедуру - выполнить - удалить", т.к. в FB нет безымянных блоков кода на PSQL.

[0]
Такой подход, мне кажется, является результатом плохого проектирования и еще более плохой стратегии обновления.


ЮЮ   (2007-02-15 11:09:00) [4]

В BOL, например, все примеры приведены в стиле

IF EXISTS (SELECT name FROM sysobjects
     WHERE name = 'proc1' AND type = 'P')
  DROP PROCEDURE proc1
GO
-- Creating a procedure on a nonexistent table.
USE pubs
GO
CREATE PROCEDURE proc1
AS
  SELECT *
  FROM does_not_exist
GO  


А как с этим в ваших мануалах?

А разве создать и выполнить процедуру в рамках одной сессии в IB можно?


PEAKTOP   (2007-02-15 11:06:00) [5]


SELECT COUNT(P.RDB$PROCEDURE_ID)
FROM  RDB$PROCEDURES P
WHERE(P.RDB$PROCEDURE_NAME = 'MY_PROC')


Если COUNT > 0 то процедура существует.


pavel_guzhanov   (2007-02-15 10:45:00) [6]


> но многие НОРМАЛЬНЫЕ компоненты это умеют делать сами


А стандартные компоненты Delphi - ненормальные? :о))


> И кто же позволит вот так просто создать процедуру на сервере
> первому попавшему юзверю.


У юзверя права SYSDBA


ЮЮ   (2007-02-15 10:15:00) [7]


> Если процедуры в базе нет, то ее надо создать, если есть,
>  то надо выполнить запрос.


И кто же позволит вот так просто создать процедуру на сервере первому попавшему юзверю.


Виталий Панасенко   (2007-02-15 10:08:00) [8]

ibase.ru статья о системных таблицах(запросах  к ним). но многие НОРМАЛЬНЫЕ компоненты это умеют делать сами...


Наверх

Титульная страница Поиск, карта сайта Написать письмо