powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA902: как извлечь текст тригеров и процедур в набор файлов
4 сообщений из 4, страница 1 из 1
ASA902: как извлечь текст тригеров и процедур в набор файлов
    #33323477
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
каждую процедуру в отдельный файл <имя процедуры>.sql
...
Рейтинг: 0 / 0
ASA902: как извлечь текст тригеров и процедур в набор файлов
    #33323489
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще всего выгрузить структуру базы в скрипт и потом разобрать получившийся reload.sql. Смотри утилиту dbunload.exe

Либо читай таблицы SYS.SYSPROCEDURE, поля proc_name, proc_defn и SYS.SYSTRIGGER (trigger_name, trigger_defn) и записывай текст из полей ?_defn в файлы.
...
Рейтинг: 0 / 0
ASA902: как извлечь текст тригеров и процедур в набор файлов
    #33325405
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что у меня получилось, может кому пригодится:
Код: plaintext
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.
CREATE PROCEDURE "DBA"."sp_am_exportscripts"( IN @dest varchar( 255 ), IN @creator varchar( 50 ) DEFAULT 'DBA' )
// процедура экспортирует хранимые процедуры и триггеры БД в набор файлов вида <имя файла>.sql в папку @dest
BEGIN
    if right(@dest,  1 ) <> '\' then set @dest = @dest + '\' end if;

    select p.proc_name, xp_write_file( @dest + p.proc_name + '.sql', 
        'if exists(select 1 from sys.sysprocedure where proc_name = ''' + p.proc_name + '''' + 
        ' and user_name(creator) = ''' + @creator + ''') then \x0D\x0A' +
        '   drop procedure ' + p.proc_name + '\x0D\x0A' +
        'end if;\x0D\x0A\x0D\x0A' +
        replace(isnull(p.source, p.proc_defn), '\x0A', '\x0D\x0A') + ';' ) as result
    from
       sys.sysprocedure p
    where user_name(p.creator) = @creator
    union all
    select r.trigger_name, xp_write_file( @dest + r.trigger_name + '.sql', 
        'if exists(select 1 from sys.systrigger where trigger_name = ''' + r.trigger_name+ '''' +
        ') then \x0D\x0A' +
        '   drop trigger ' + r.trigger_name + '\x0D\x0A' +
        'end if;\x0D\x0A\x0D\x0A' +
        replace(isnull(r.source, r.trigger_defn), '\x0A', '\x0D\x0A') + ';' ) as result
    from 
       sys.sysuserperms u
          join sys.systable t on (t.creator=u.user_id)
          join sys.systrigger r on (r.table_id = t.table_id)
    where 
      r.trigger_name is not null
      and u.user_name = @creator;

END
...
Рейтинг: 0 / 0
ASA902: как извлечь текст тригеров и процедур в набор файлов
    #33376646
Фотография barry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rcryoВот что у меня получилось, может кому пригодится:
Как отделить пользователькие процедуры/триггера от системных?
Может я конечно что-то в скрипте не досмотрел...
Версия тоже ASA902.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA902: как извлечь текст тригеров и процедур в набор файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]