Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / Не могу заставить работать public.sysdbclose() / 8 сообщений из 8, страница 1 из 1
26.07.2005, 18:56
    #33185736
falcon111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу заставить работать public.sysdbclose()
Подскажите, плиз, что я делаю не так:
Я хочу, чтобы при отключении юзера от базы чистилась одна табличка, чтобы из нее удалялись данные этой сессии.

Сделал вот что:

create procedure logoff()
define osid like sessions.sid;

select dbinfo('sessionid') into osid from systables where tabname='systables';
if osid is not null then
delete from sessions where sid=osid;
end if;

return;
end procedure;
revoke execute on logoff from public;
update statistics for procedure logoff;

drop procedure public.sysdbclose;
create procedure public.sysdbclose()

execute procedure logoff();

end procedure;

И... ничего не происходит - записи из таблицы sessions не удаляются.

Где недочитал TFM ?
...
Рейтинг: 0 / 0
26.07.2005, 20:05
    #33185799
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу заставить работать public.sysdbclose()
falcon111
drop procedure public.sysdbclose;
create procedure public.sysdbclose()

А в какой версии это вообще появилось ?
В 9.3 я такого не видел...
...
Рейтинг: 0 / 0
26.07.2005, 20:53
    #33185822
falcon111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу заставить работать public.sysdbclose()
vasilis falcon111
drop procedure public.sysdbclose;
create procedure public.sysdbclose()

А в какой версии это вообще появилось ?
В 9.3 я такого не видел...

Кстати, забыл сказать, что сервер 9.4ТС3

А насчет где - читаю вот это:
ct1sqna.pdf
IBM informix guide to SQL
syntax
IBM Informix Extended Parallel Server, v8.4
IBM Informix Dynamic Server, v9.4
...
Рейтинг: 0 / 0
27.07.2005, 11:53
    #33186514
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу заставить работать public.sysdbclose()
falcon111
Кстати, забыл сказать, что сервер 9.4ТС3
А насчет где - читаю вот это:
ct1sqna.pdf
IBM informix guide to SQL syntax
IBM Informix Extended Parallel Server, v8.4
IBM Informix Dynamic Server, v9.4


XPS - Identifies information or syntax that is specific to IBM Informix Extended Parallel Server.
...
Рейтинг: 0 / 0
27.07.2005, 11:59
    #33186546
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу заставить работать public.sysdbclose()
vasilis falcon111
Кстати, забыл сказать, что сервер 9.4ТС3
А насчет где - читаю вот это:
ct1sqna.pdf
IBM informix guide to SQL syntax
IBM Informix Extended Parallel Server, v8.4
IBM Informix Dynamic Server, v9.4
XPS - Identifies information or syntax that is specific to IBM Informix Extended Parallel Server.
Плохо и не внимательно читаешь, ведь там (в Guide to SQL syntax) слева от текста, относящемуся к sysdbopen sysdbclose крупно нарисован значок XPS, который обозначает, что эта информация специфична ТОЛЬКО для версии XPS.
Мда, облом...обидно бывает, когда тратишь время на банальные вещи :(
...
Рейтинг: 0 / 0
27.07.2005, 17:45
    #33187661
falcon111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу заставить работать public.sysdbclose()
vasilisПлохо и не внимательно читаешь, ведь там (в Guide to SQL syntax) слева от текста, относящемуся к sysdbopen sysdbclose крупно нарисован значок XPS, который обозначает, что эта информация специфична ТОЛЬКО для версии XPS.
Мда, облом...обидно бывает, когда тратишь время на банальные вещи :(

Посыпаю голову пеплом. Круто протормозил. :(

Еще вопрос возник сегодня:

Для взаимодействия базы данных и ПО, отрабатывающего изменения в базе, я написал крохотную программку. Для пущего бестроты ее запуска - без рантайма и прочего, в ней 45 байт собственно кода получилось:) Ее назначение - открыть named event object и "посигналить" в него, чтобы другое ПО "проснулось" и выбрало данные с сервера для работы.

На информиксе есть процедура, она вызывает этот мой костылик через
system 'filename.exe';
И все бы хорошо, но этот костыль запускается только если sql работает из-под аккаунта информикса. СтОит запустить процедуру из-под любого "рабочего" логина - system возвращает ошибку -668.

В докции сказано, что system выполняется из-под аккаунта того, кем вы залогинились на сервер, чтобы были полномочия. И еще говорится, чтобы у информикса были advanced права - там перечислены какие.
Права информикса в полиси проверил - есть.
А что нужно аккаунту, чтобы из-под него запускался system - не понял.

Как эту -668 побороть, какие именно права пользователя или что там нужно? Никто с такой проблемой не сталкивался?
...
Рейтинг: 0 / 0
27.07.2005, 19:05
    #33187830
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу заставить работать public.sysdbclose()
DBA_Tools\DOC\FAQ_Informix_Programming.txt
...
---------------------------------------------------------------
* Как выполнить в хранимой процедуре команды ОС MS Windows NT ?
---------------------------------------------------------------

To execute system commands in stored procedures, logon to the
database server with your password. If you have not explicitly
connected to the database server with a valid username and password,
the error returned is -668. This error occurs for both DB-Access and
ESQL/C applications.

The "informix" user must have the following Advanced User Rights :

* Act as part of the operating system
* Increase quotas
* Replace a process level token

System commands should contain the absolute path of the script
or the executable that needs to be executed; for example:

system "c:\temp\test.exe"

If you wish to redirect the output of the command to files, the command
line should include the command shell; for example:

system "cmd.exe /C c:\temp\test.exe > c:\temp\stdout.out
c:\temp\stderr.out"

When you include cmd.exe in the system command, you must specify the
/C option.
Without this option, the command shell will not exit,
which causes the database server to wait indefinitely.

The database server will wait for the outcome of the execution of a
system command. Pay close attention to system commands defined in stored
procedures. The client application will hang if the system command never
completes or never returns
.

Windows-Specific Information for NT
You can connect to Informix Dynamic Server as any user. You do
not need to have the "Logon Locally" right for that. However,
to be able to run a system command in a stored procedure, you need
have the "Logon Locally" right
. User Manager, a Windows NT Administrator
Tool, can assign this right. A Windows NT workstation automatically
assigns this right to new users. On a Windows NT server, the
Administrator needs to assign this right explicitly.
-------------------------------------------
И еще для информации кусочек из того же FAQ:

(Daugava): Да чего там "system" описывать, он прост как паровоз, но фактически это путь через "ж..", т.е. через вызов внешней программы. Если это необходимо для промышленного решения, в особенности в OLTP задаче, сразу в сад. ...
Говоря про использование "system", я констатировал, что это единственная возможность в случае 7-ки, но я не утверждал, что ее стоит использовать. Ибо, соединенение, вызванное через "system" будет новым, т.е. вы не сможете обмениваться данными через временные таблицы. Вызов внешнего приложения отрицательно скажется на производительности сервера.
...
На счет не работоспособности "SYSTEM" все очень сильно зависит от платформы, на которой стоит informix.
-----
...
Рейтинг: 0 / 0
28.07.2005, 02:15
    #33188095
falcon111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу заставить работать public.sysdbclose()
vasilis(Daugava): Да чего там "system" описывать, он прост как паровоз, но фактически это путь через "ж..", т.е. через вызов внешней программы. Если это необходимо для промышленного решения, в особенности в OLTP задаче, сразу в сад. ...
Говоря про использование "system", я констатировал, что это единственная возможность в случае 7-ки, но я не утверждал, что ее стоит использовать. Ибо, соединенение, вызванное через "system" будет новым, т.е. вы не сможете обмениваться данными через временные таблицы. Вызов внешнего приложения отрицательно скажется на производительности сервера.
...
На счет не работоспособности "SYSTEM" все очень сильно зависит от платформы, на которой стоит informix.
-----

Насчет тормознутости все понятно. Мне оно в общем-то нужно было только для проверки, чтобы проверить саму идею, и стало интересно, что информиксу нужно, чтобы оно работало из-под любого пользователя.

А для работы я просто сделал ДЛЛ-ку, подключил ее как UDR, и вызываю ее через execute procedure.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Не могу заставить работать public.sysdbclose() / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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