powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Возвращаясь к старому вопросу
10 сообщений из 10, страница 1 из 1
Возвращаясь к старому вопросу
    #34051128
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заданному вот здесь .
В общем ситуация следующая (я понимаю что запутанно, но увы - что имеем):

Есть две базы А и Б.
В базе А есть таблица. На нее - триггер. Из этого триггера вызывается процедура (тоже находящаяся в базе А), которая напрямую обращается к таблице в базе Б (то есть делает DELETE FROM Б:бла-бла-бла). На таблице в базе Б тоже есть триггер. И из него происходит попытка вызова другой процедуры из базы Б. Которая заканчивается обломом с текстом "Can't resolve procedure name ...". Причем для пользователя informix все хорошо...
Скажите, патриархи, что может быть причиной проблемы?
И еще (я понимаю что это, скорее, шаманство, но тем не менее) - может ли помочь следующий финт: в базе Б создать процедуру и из триггера (на таблице в А) вызывать ее, а не делать прямого обращения к таблице?

Прочитал еще раз - идиоты на марше, называется! Но мне уже деваться некуда :((
...
Рейтинг: 0 / 0
Возвращаясь к старому вопросу
    #34051189
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Фадеев Заданному вот здесь .
В общем ситуация следующая (я понимаю что запутанно, но увы - что имеем):

Есть две базы А и Б.
В базе А есть таблица. На нее - триггер. Из этого триггера вызывается процедура (тоже находящаяся в базе А), которая напрямую обращается к таблице в базе Б (то есть делает DELETE FROM Б:бла-бла-бла). На таблице в базе Б тоже есть триггер. И из него происходит попытка вызова другой процедуры из базы Б. Которая заканчивается обломом с текстом "Can't resolve procedure name ...". Причем для пользователя informix все хорошо...
Скажите, патриархи, что может быть причиной проблемы?
И еще (я понимаю что это, скорее, шаманство, но тем не менее) - может ли помочь следующий финт: в базе Б создать процедуру и из триггера (на таблице в А) вызывать ее, а не делать прямого обращения к таблице?

Прочитал еще раз - идиоты на марше, называется! Но мне уже деваться некуда :((
ошибка -674 Routine <routine-name> cannot be resolved возникает не только в том случае, когда процедура не существует, но также если у пользователя на нее нет прав.
А пользователь informix что делает - вызывает триггер на таблицу в базе А?
Кто владелец триггера? Кто владелец процедуры, вызывающейся из триггера? Какие у него права в базе Б? И кто в базе Б владелец триггера и процедуры?
И еще - какая у вас версия Informix?
...
Рейтинг: 0 / 0
Возвращаясь к старому вопросу
    #34051334
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всего много, поэтому - по пунктам:
Таношибка -674 Routine <routine-name> cannot be resolved возникает не только в том случае, когда процедура не существует, но также если у пользователя на нее нет прав.Про это я в курсе. Более того - в данном случае проблема именно в отстутствии прав. Другое дело - почему?
ТанА пользователь informix что делает - вызывает триггер на таблицу в базе А?Имеется в виду - проводит ту же последовательность действий.
ТанКто владелец триггера?Informix.
ТанКто владелец процедуры, вызывающейся из триггера?Informix. Но EXECUTION GRANT TO PUBLIC.
ТанКакие у него права в базе Б?DB owner (насколько я понимаю)
ТанИ кто в базе Б владелец триггера и процедуры?Informix. Тоже EXECUTION GRANT TO PUBLIC.
ТанИ еще - какая у вас версия Informix?9.4
...
Рейтинг: 0 / 0
Возвращаясь к старому вопросу
    #34051468
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
права пользователям раздаются через роли?
...
Рейтинг: 0 / 0
Возвращаясь к старому вопросу
    #34051492
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денисправа пользователям раздаются через роли?Нет
...
Рейтинг: 0 / 0
Возвращаясь к старому вопросу
    #34051496
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще-то триггер исполняется от имени его владельца, и именно владельцу триггера нужны права на исполнение процедуры

Вы говорите, пользователем informix все нормально. Значит у простого не работает?
Какие у простого пользователя права в базе Б?
Вы на примере воспроизвести можете? Поиграйтесь с владельцами, правами

А еще может быть вариант - в вызове процедуры неправильные типы параметров указаны.
В 9.4 можно создавать процедуры с одинаковым именем, только у них типы параметров должны быть разные. При вызове он ищет процедуру, типы параметров которой соответствуют типам параметров в вызове
...
Рейтинг: 0 / 0
Возвращаясь к старому вопросу
    #34051516
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тан...
А еще может быть вариант - в вызове процедуры неправильные типы параметров указаны.
...От dba все работает.
...
Рейтинг: 0 / 0
Возвращаясь к старому вопросу
    #34052815
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
echo "create database a in dev1;
grant connect  to test;
create table t1 (f int);
"|dbaccess sysmaster

echo "create database b in dev1;
create table tb1 (f int);
create table tb2 (f int);
create PROCEDURE test();
 insert into  tb2  values (1);
END PROCEDURE;

database a;
create trigger tr1 insert on t1 referencing new as inserted
for each row
 ( insert into  b:tb1  values (1));

database b;

create trigger tr2 insert on tb1 referencing new as inserted         
for each row
 ( insert into  tb2  values (111));
"|dbaccess sysmaster

echo "grant insert on t1  to test"|dbaccess a

коннектимся test\test@a insert into t1 values ( 100 );

echo "select * from tb2;"|dbaccess b
Database selected.
          f
         111 
 1  row(s) retrieved.
Database closed.

IBM Informix Dynamic Server Version  10 . 00 .UC3

На 10.00.TC3 все тоже самое.
...
Рейтинг: 0 / 0
Возвращаясь к старому вопросу
    #34052886
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу, пить надо меньше.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
echo "drop trigger tr2;
create trigger tr2 insert on tb1 referencing new as inserted          
for each row
 ( execute procedure test());         
"|dbaccess b

коннектимся test\test@a insert into t1 values ( 100 );


echo "select * from tb2;"|dbaccess b
Database selected.
          f
         111 
           1 
 2  row(s) retrieved.
Database closed.
...
Рейтинг: 0 / 0
Возвращаясь к старому вопросу
    #34052975
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но информикс это что-то с чем-то, обожаю индусов.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
echo "connect to 'a' USER test; insert into t1 values (100);"|dbaccess sysmaster
Database selected.

   201 : A syntax error has occurred.
Error in line  1 
Near character position  24 

   206 : The specified table (t1) is not in the database.
   111 : ISAM error:  no record found.
Error in line  1 
Near character position  42 

Database closed.



echo "connect to 'a' USER test fsdfsgdgfgh; insert into t1 values (100);"|dbaccess sysmaster
Database selected.
   ENTER PASSWORD:
Disconnected.
Connected.
 1  row(s) inserted.
Disconnected.

fsdfsgdgfgh -- бессмысленный набор символов. 10.00.UC3 Линукс.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Возвращаясь к старому вопросу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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