powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как узнать кто запустил процедуру?
13 сообщений из 13, страница 1 из 1
как узнать кто запустил процедуру?
    #32602332
goshanew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как узнать кто запустил хранимую процедуру - юзер или другая процедура?
Конкретнее мне надо узнать например процедуру PROC запустил юзер или она сама себя рекурсивно запустила?

Ведь гранты раздаются на запуск процедур и процедурам тоже... Так может есть возможность узнать в самой процедуре о том кто ее запустил?
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602362
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно так как ты хочешь - НЕТ.
Зайди с другого краю.
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602369
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конечно же, с помощью дополнительного параметра процедуры, который процедура будет заполнять, а юзер (клиентская программа) не будет
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602379
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом форуме скорее всего ответят НЕТ (проще - не знают)
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602383
goshanew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с параметром - это понятно , только некрасиво немножко
но скорее всего так и придется сделать
спасибо
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602385
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinВ этом форуме скорее всего ответят НЕТ (проще - не знают)
Это наезд?
А сходить почитать рекомендации ?
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602402
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийЭто наезд?
А сходить почитать
Блин, ссылки каки-то старые.
мож че новое есть???

Код: plaintext
С уважением ваш
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602421
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может подойти к этому вопросу с другого бока, для чего это надо, вдруг есть другой путь ?
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602437
goshanew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex777А может подойти к этому вопросу с другого бока, для чего это надо, вдруг есть другой путь ?

другого пути нет
если вызывает юзер то выполняется вставка данных в одну из таблиц, а если рекурсивно вызвана то не выполняется

процедура копирования объекта со всеми его свойствами и связями, так вот в связях могут быть подчиненные объекты, которые тоже надо скопировать.
а когда начинается копирование подчиненных то происходит засада, т.к. у связи два конца и происходит зацикливание.
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602454
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goshanewкогда начинается копирование подчиненных то происходит засада, т.к. у связи два конца и происходит зацикливание.
Вот с этого и нужно было начинать.
А то загнал сам себя в угол выбранным решением
и мужественно пытаешься преодолеть препятствия...
Текст процедуры давай.
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602458
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видится вариант, что рекурсивную процедуру юзер не должен запускать. Он запускает вторую процедуру, которая в свою очередь будет запускать рекурсивную. С тем самым параметром.
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602461
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самый простой вариант если я все правильно понял выделить блок со вставкой в отдельную процедуру и запускать ее с клиента.
...
Рейтинг: 0 / 0
как узнать кто запустил процедуру?
    #32602463
goshanew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
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.
CREATE PROCEDURE CLONE_OBJECT (
    SOURCE_ID INTEGER,
    NEW_CODE VARCHAR( 80 ),
    RECURS INTEGER)
RETURNS (
    ID INTEGER)
AS
DECLARE VARIABLE LTYPEID INTEGER;
DECLARE VARIABLE FINDEX INTEGER;
DECLARE VARIABLE CODE VARCHAR( 128 );
DECLARE VARIABLE OTYPEID INTEGER;
DECLARE VARIABLE GID INTEGER;
begin
  SELECT ID FROM SP_GEN_OBJECTS_ID INTO :ID;
  SELECT OTYPEID FROM OBJECTS WHERE (ID = :SOURCE_ID) INTO :OTYPEID;
  SELECT ID FROM GET_ID_BY_CODE('CONTENT', 'LINK_TYPE') INTO :LTYPEID;
  INSERT INTO OBJECTS(ID, OTYPEID, CODE)
         SELECT :ID, OTYPEID, :NEW_CODE
         FROM OBJECTS
         WHERE ID = :SOURCE_ID;
  EXECUTE PROCEDURE ASSIGN_PROPERTIES(:SOURCE_ID, :ID);

  INSERT INTO LINKS(PARENTID, CHILDID, LTYPEID)
         SELECT :ID, CHILDID, LTYPEID
         FROM LINKS
         WHERE (PARENTID = :SOURCE_ID)
               AND NOT (LTYPEID = :LTYPEID);

  IF (RECURS =  1 ) THEN
    INSERT INTO LINKS(PARENTID, CHILDID, LTYPEID)
           SELECT PARENTID, :ID, LTYPEID
           FROM LINKS
           WHERE (CHILDID = :SOURCE_ID)
                 AND NOT (LTYPEID = :LTYPEID);
  ELSE
    INSERT INTO LINKS(PARENTID, CHILDID, LTYPEID)
           SELECT PARENTID, :ID, LTYPEID
           FROM LINKS
           WHERE (CHILDID = :SOURCE_ID);

  INSERT INTO PRICES(OWNERID, PTYPEID, CURRENCYID, OLINKID, VALUE_NUMERIC, VALUE_DATE)
         SELECT :ID, PTYPEID, CURRENCYID, OLINKID, VALUE_NUMERIC, VALUE_DATE
         FROM PRICES
         WHERE OWNERID = :SOURCE_ID;

  FOR SELECT CHILDID, FINDEX
      FROM LINKS
      WHERE (PARENTID = :SOURCE_ID)
            AND (LTYPEID = :LTYPEID)
      INTO :GID, :FINDEX
  DO
  BEGIN
    CODE = NULL;
    IF (EXISTS (SELECT ID FROM OBJECTS WHERE ID = :OTYPEID AND CODE = 'DATASET')) THEN
    BEGIN
      SELECT CODE FROM OBJECTS WHERE ID = :ID INTO :CODE;
      SELECT :CODE || '.' || VALUE_STRING FROM GET_PROPERTY_VALUE(:GID, 'CODE', NULL,  0 , NULL) INTO :CODE;
    END
    INSERT INTO LINKS(PARENTID, CHILDID, LTYPEID, FINDEX)
           SELECT :ID, ID, :LTYPEID, :FINDEX
           FROM CLONE_OBJECT(:GID, :CODE,  1 );
  END

  SUSPEND;
end

так работает правильно - но пришлось ввести параметр
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как узнать кто запустил процедуру?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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