Como puedo matar un proceso desde oracle forms?

Ppedro
22 de Agosto del 2003
Necesito matar un proceso desde una ventana de forms, en concreto esta ventana tiene que matar a todas las que tengan runtime de forms y a si misma despues, pero no encuentro la api que lo hace.
A ver si alguien puede darme alguna pista
un saludo y gracias

nerea
22 de Agosto del 2003
Crea un procedimiento almacenado y llámalo desde Forms.
El procedimiento podría ser algo así:

CREATE OR REPLACE PROCEDURE Matar_sesiones
IS
Stmt_Str VARCHAR2(200);
Cur_Hdl INT;
Rows_Processed NUMBER;
Sid_V VARCHAR2(30);
Serial#_V VARCHAR2(30);
Programs_V VARCHAR2(100) := 'D:orantBINifweb60.exe'; -- aquí tendrías que ver lo que te interesa poner,...
Users_V VARCHAR2(100) := 'SCOTT'; -- añade los usuarios que quieras
CURSOR pri IS
SELECT Sid, Serial#
FROM V$Session
WHERE Program In (Programs_V) And Username Is Not Null And Username In (Users_V);
BEGIN
FOR Usr In Pri
LOOP
Sid_v := Usr.Sid;
Serial#_V := Usr.Serial#;
Stmt_Str := 'ALTER SYSTEM KILL SESSION ''' || Sid_V || ',' || Serial#_V || '''';
Cur_Hdl := Dbms_Sql.Open_Cursor;
Dbms_Sql.parse(Cur_Hdl, Stmt_Str, Dbms_Sql.Native);
Rows_Processed := dbms_sql.execute(Cur_Hdl);
Dbms_Sql.Close_Cursor(Cur_Hdl);
END LOOP;
END;


Ppedro
22 de Agosto del 2003
Mi pregunta no iba por ahi, el asunto no es que quiera matar las sesiones en la base de datos de un determinado runtime, sino matar el runtime en si.

nerea
22 de Agosto del 2003
Vale,... entendí mal. Entonces supongo que trabajas en un entorno web, y que todos los runtimes están en el servidor.

No sé si hay alguna api para ello. A ver si esto te ayuda en algo:

Si el servidor es Unix o Linux ya tienes el comando kill, si es Windows puedes descargar el kill.exe (http://helpdesk.kixtart.org/Download/Utils/KILL.EXE).
Y utilizar el HOST desde forms :

begin
declare
sentencia varchar2(100);
id_proc varchar2(10);
cursor procesos is select process from v$session where program ='ifrun60'; #mira cómo se llama el programa en tu caso
begin
open procesos;
loop
fetch procesos into id_proc;
exit when procesos%NOTFOUND;
HOST(('kill '||id_proc);
end loop;
end;
end;
/

Ppedrop
22 de Agosto del 2003
No es exactamente esto, el tema del kill ya lo tengo cogido (estaba buscando tambien una api que hiciera esto en lugar de un proceso externo).
La tabla V$sesion no la tengo disponible, se trataria mas de un tema de windows.. localizar todos los ifrun60 y cerrarlos