Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / INSERT INTO RDB$PROCEDURE_PARAMETERS / 23 сообщений из 23, страница 1 из 1
27.12.2018, 17:41
    #39754080
Mh7
Mh7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Нужно добавить набор из N выходных параметров в M процедур.
Корректно ли будет делать это через INSERT INTO RDB$PROCEDURE_PARAMETERS из под SYSDBA (имена процедур известны),
а не открывая каждую процедуру и компилируя её после редактирования?
...
Рейтинг: 0 / 0
27.12.2018, 17:50
    #39754089
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7,

в топку. Не работоспособно
...
Рейтинг: 0 / 0
27.12.2018, 17:55
    #39754091
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7> Корректно ли будет делать это через INSERT INTO RDB$PROCEDURE_PARAMETERS

Ответ на этот вопрос не имеет смысла, потому что даже
если взлетит - что ты потом с ними будешь делать, BLR
по их обработке (заполнению) сам напишется?

Если сверху до гланд трудно добраться -
не надо пытаться сделать это через анус.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.12.2018, 18:16
    #39754111
Mh7
Mh7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Гаджимурадов Рустам,

да нет, конечно BLR сам не напишеться, но хоть объявить эти параметры побыстрее...
Блин, но 70 процедур!!!

Вот, попробовал, вроде добавил:


Код: sql
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.
create or alter procedure MDI_ADD_PARAMETER
(
  param_name varchar(31),
  param_domain varchar(31),
  proc_prefix varchar(31)
)
returns(proc varchar(50) ,stmt varchar(1024))

as
begin
 for
 select trim(r.rdb$procedure_name) from rdb$procedures r
 where r.rdb$procedure_name starting upper(:proc_prefix)
 into
   :proc
 do
   begin
     stmt = '
     insert into rdb$procedure_parameters
     (
        rdb$procedure_name,
        rdb$parameter_name,
        rdb$parameter_type,
        rdb$parameter_number,
        rdb$field_source
      )
      values
      ('''||
      :proc
      ||''',
      '''||:param_name||''',
      1,
      (select count(*) from rdb$procedure_parameters z where z.rdb$parameter_type=1 and z.rdb$procedure_name='''||:proc||'''),
      '''||:param_domain||'''
      );';
    execute statement :stmt;
    suspend;
  end
end



Вопрос вот о чем: корректно ли лезть в эту системную таблицу таким образом? Сейчас норм, а что будет после backup/restore (прям сейчас нет возможности проверить)???
...
Рейтинг: 0 / 0
27.12.2018, 18:28
    #39754120
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7Вопрос вот о чем: корректно ли лезть в эту системную таблицу таким образом?
1. Нет, не корректно. В версии >= 3.0 это даже запрещено.
2. Ты отгребешь кучу багов. Разных. Я отгребал
...
Рейтинг: 0 / 0
27.12.2018, 18:29
    #39754121
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7Блин, но 70 процедур!!!
Ну так и проальтери их скриптом. Тебе что, процессор жалко?
...
Рейтинг: 0 / 0
27.12.2018, 18:31
    #39754122
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Я бы пересоздавал каждую процедуру динамическим SQL. Исходник же есть в системных таблицах.

Это если бы вообще дошел до мысли автоматизировать добавление аргументов. Скорее, дошел бы до мысли научить клиента не падать при отсутствии аргумента у процедуры.
...
Рейтинг: 0 / 0
27.12.2018, 18:39
    #39754131
Mh7
Mh7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
YuRock, спасибо!
...
Рейтинг: 0 / 0
27.12.2018, 18:42
    #39754132
Mh7
Mh7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
YuRock, "скриптом": это получить исходный текст и, пропарсив его, воткнуть в конец списка выходных параметров нужный мне???
Или меня не туда несет?
...
Рейтинг: 0 / 0
27.12.2018, 18:42
    #39754133
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7открывая каждую процедуру и компилируя её после редактирования?

"Чо?" (с)

У нормальных разработчиков процедуры (пере-)создаются скриптом, который лежит в СКВ.
Текстовые редакторы умеют массовую автозамену.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.12.2018, 18:53
    #39754137
Mh7
Mh7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Dimitry Sibiryakov,

Я не очень-то "нормальный" разработчик:)
...
Рейтинг: 0 / 0
27.12.2018, 19:43
    #39754166
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7> да нет, конечно BLR сам не напишеться, но хоть объявить эти параметры побыстрее...

ОК, если с первого раза не получилось, попробуем со второго.
Допустим, ты все правильно сделал, объявил (добавил) - что
потом, что должно произойти, после изменения текста ХП и
его компиляции?

Mh7> Блин, но 70 процедур!!!

Как уже подсказали - автоматизируй обработку текста ХП
(если и там, где это возможно).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.12.2018, 22:38
    #39754236
Mh7
Mh7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Гаджимурадов Рустам,

авторчто
потом, что должно произойти, после изменения текста ХП и
его компиляции?


Да ничего!!!:)
Потом я буду последовательно в редакторе открывать эти процедуры, писать код получения данных для этих параметров (ибо он не всегда одинаков), и компилировать. Но мне уже не надо их объявлять!!!:)
...
Рейтинг: 0 / 0
27.12.2018, 22:43
    #39754238
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7,

рука лицо
...
Рейтинг: 0 / 0
27.12.2018, 23:51
    #39754255
Mh7
Mh7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Симонов Денис, объясните.
...
Рейтинг: 0 / 0
28.12.2018, 00:20
    #39754263
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7,

кстати, при всём этом геморрое с АВТОМАТИЧЕСКи создаваемыми процедурами возникает резонный вопрос - нафиг они вообще нужны?
Работал я в конторе, и для одного проекта там отчеты делались процедурами. Когда количество процедур стало около 30-40, стало ясно, что управлять этим совершенно невозможно. В результате процедурам был дан отбой, и было создано приложение, которое генерило отчеты (динамически создаваемый sql в приложении) по внешнему описанию из xml.

Допустим, пресловутые "70 процедур" - это интерфейс к insert/update/delete разных таблиц. Ну тогда эти процедуры вообще генерятся АВТОМАТИЧЕСКИ.

К слову, я вижу у вас нездоровое увлечение execute statement. Попробуйте представить, что его вообще не существует.
...
Рейтинг: 0 / 0
28.12.2018, 09:10
    #39754331
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7Я не очень-то "нормальный" разработчик:)Выгрузи их скопом в скрипт, автозамена, накатывание скрипта.
...
Рейтинг: 0 / 0
28.12.2018, 09:27
    #39754343
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7,

да чего тут объяснять. Прямая модификация системных таблиц запрещена в 3.0. В 2.5 это пропускалось, но за это расстреливать надо, ибо не факт что будет работоспособно да и вообще можно убить БД.
Нормальный путь собрать себе PSQL процедуру/функцию (или вообще на клиентской стороне), которая будет генерировать болванку скрипта для создания ХП с нужными параметрами и пустым телом процедуры.
...
Рейтинг: 0 / 0
28.12.2018, 10:08
    #39754357
Mh7
Mh7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
kdv,

Да нет у меня никаких АВТОМАТИЧЕСКИ создаваемых процедур!!!
Ещё раз: надо добавить N параметров в M процедур, смущает, что лезу в системную таблицу, "руками" не охота, всё!!!

И про "нездоровое увлечение execute statement" вообще не понял...
...
Рейтинг: 0 / 0
28.12.2018, 10:11
    #39754358
Mh7
Mh7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Симонов Денис,

да, спасибо что ответили. У нас 2.5, но я не сторонник bad practice, так что послушаю вас. Спасибо ещё раз.
...
Рейтинг: 0 / 0
28.12.2018, 10:12
    #39754360
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7,

я же тебе рассказал про нормальный путь. Ну и к слову. В IBExpert есть возможность типовые болванки ХП делать для ISNERT/UPDATE/DELETE таблиц
...
Рейтинг: 0 / 0
28.12.2018, 10:27
    #39754373
Mh7
Mh7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Симонов Денис, у меня не надо создавать процедуру с пустым телом. Процедуры уже есть, с не пустым телом.
Хотелось добавить выходной параметр во все эти процедуры "автоматом", код для получения данных в этот выходной параметр я уже сам, "ручками", допишу.

Ладно, ребят, давайте закроем тему: нельзя, так нельзя, я ответ получил на свой вопрос.

Всех с Наступающим!
...
Рейтинг: 0 / 0
28.12.2018, 12:44
    #39754485
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO RDB$PROCEDURE_PARAMETERS
Mh7Хотелось добавить выходной параметр во все эти процедуры "автоматом"
1. Открываешь эксперт.
2. Выгружаешь требуемые процедуры в скрипт
3. Любым текстовым редактором с возможностью автозамены (сам эксперт это умеет) вместо ключевой фразы "create or alter procedure" ставишь "create or alter procedure <СПИСОК ПАРАМЕТРОВ>". либо перед фразой ")returns (" ставишь свое "<СПИСОК ПАРАЕТРОВ>)returns ("
4. Скармливаешь скрипт исполнятору скриптов (эксперт это тоже умеет).
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / INSERT INTO RDB$PROCEDURE_PARAMETERS / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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