Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA - как осоединить все коннекты к базе кроме своего? / 5 сообщений из 5, страница 1 из 1
13.04.2006, 16:03
    #33664960
Юрий Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA - как осоединить все коннекты к базе кроме своего?
Идея вроде простая - sa_conn_info() даёт все коннекты,
connection_property( 'number' ) - твой коннект.
Не работает сам drop connection в цикле.




Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ALTER PROCEDURE "DBA"."disconnect"() 
begin
  create table #tmp (connid integer primary key);
  insert into #tmp select number from  sa_conn_info();
  delete from #tmp where connid=connection_property( 'number' );
   
  FOR names AS curs CURSOR FOR
    SELECT connid
    FROM #tmp
    DO
    
       drop connection connid;  // drop connection требует константы
    
    END FOR;
end
...
Рейтинг: 0 / 0
13.04.2006, 16:45
    #33665154
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA - как осоединить все коннекты к базе кроме своего?
Динамический SQL вроде никто не отменял ? :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ALTER PROCEDURE "DBA"."disconnect"() 
BEGIN
  DECLARE @SQL long varchar;

  SELECT List('drop connection ' || number || ';', '\n')
  INTO @SQL
  FROM sa_conn_info()
  WHERE number <> connection_property( 'number' );

  EXECUTE IMMEDIATE @SQL WITH RESULT SET OFF;
END
Еще я не очень понял прикола с созданием времянки, с дальнейшим убитием в ней текущего процесса и обработкой времянки курсором - зачем так усложнять задачу ?

P.S. Неплохо бы номер версии ASA указывать, к примеру для сервера ранее 9-ки нужно убрать WITH RESULT SET OFF. И еще - дропать всех пользователей конечно хорошо, но немного жестоко, особенно если они транзакции в это время проводят.
...
Рейтинг: 0 / 0
13.04.2006, 17:19
    #33665272
Юрий Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA - как осоединить все коннекты к базе кроме своего?
Версия ASA 9.

Не работает скрипт - syntax error near CONNECTION.

Похоже DROP CONNECTION вообще нельзя использовать в процедурах.
...
Рейтинг: 0 / 0
13.04.2006, 17:38
    #33665328
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA - как осоединить все коннекты к базе кроме своего?
Проверил, на батче работать не хочет. Вот так вот работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ALTER PROCEDURE "DBA"."disconnect"() 
BEGIN
  FOR listCon AS curCon NO SCROLL CURSOR FOR
    SELECT Number AS @Number
    FROM sa_conn_info()
    WHERE number <> connection_property( 'number' )
  DO
    MESSAGE 'drop connection ' || @Number TO CLIENT;
    EXECUTE IMMEDIATE WITH RESULT SET OFF 'DROP CONNECTION ' || @number;
  END FOR;
END;
...
Рейтинг: 0 / 0
13.04.2006, 17:55
    #33665401
Юрий Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA - как осоединить все коннекты к базе кроме своего?
Да. Работает. Всё-таки через курсор.
Спасибо.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA - как осоединить все коннекты к базе кроме своего? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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