Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как узнать кто запустил процедуру? / 13 сообщений из 13, страница 1 из 1
13.07.2004, 17:01:42
    #32602332
goshanew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как узнать кто запустил процедуру?
как узнать кто запустил хранимую процедуру - юзер или другая процедура?
Конкретнее мне надо узнать например процедуру PROC запустил юзер или она сама себя рекурсивно запустила?

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

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

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

процедура копирования объекта со всеми его свойствами и связями, так вот в связях могут быть подчиненные объекты, которые тоже надо скопировать.
а когда начинается копирование подчиненных то происходит засада, т.к. у связи два конца и происходит зацикливание.
...
Рейтинг: 0 / 0
13.07.2004, 17:35:02
    #32602454
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как узнать кто запустил процедуру?
goshanewкогда начинается копирование подчиненных то происходит засада, т.к. у связи два конца и происходит зацикливание.
Вот с этого и нужно было начинать.
А то загнал сам себя в угол выбранным решением
и мужественно пытаешься преодолеть препятствия...
Текст процедуры давай.
...
Рейтинг: 0 / 0
13.07.2004, 17:38:44
    #32602458
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как узнать кто запустил процедуру?
видится вариант, что рекурсивную процедуру юзер не должен запускать. Он запускает вторую процедуру, которая в свою очередь будет запускать рекурсивную. С тем самым параметром.
...
Рейтинг: 0 / 0
13.07.2004, 17:39:42
    #32602461
alex777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как узнать кто запустил процедуру?
самый простой вариант если я все правильно понял выделить блок со вставкой в отдельную процедуру и запускать ее с клиента.
...
Рейтинг: 0 / 0
13.07.2004, 17:40:12
    #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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как узнать кто запустил процедуру? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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