PDA

Ver la Versión Completa : error package owa_util


Igna
12-05-2004, 12:03:25
Buenos días.

Tengo un procedure en oracle de la siguiente forma:

CREATE OR REPLACE PROCEDURE CURRENT_USERS
as
ignore boolean;
begin
htp.htmlopen;
htp.headopen;
htp.title('current users');
htp.headclose;
htp.bodyopen;
htp.header(1, 'current users');
ignore:=owa_util.tableprint('all_users');
htp.bodyclose;
htp.htmlclose;
end;

Utilizo el modplsq, para ejecutarlo através del navegador. Cuando lo ejecuto con el usuario propietario del procedure, no tengo ningún problema. El problema viene cuando lo ejecuto con otro usuario (antes le doy permiso de ejecución). Me da el siguiente error:

Wed, 12 May 2004 09:38:59 GMT

ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "LIMS.OWA_UTIL", line 323
ORA-06512: at "LIMS.HTP", line 859
ORA-06512: at "LIMS.HTP", line 974
ORA-06512: at "LIMS.HTP", line 992
ORA-06512: at "LIMS.HTP", line 40
ORA-06512: at "LIMS.CURRENT_USERS", line 5
ORA-06512: at line 7

La verdad es que voy un poco perdido con este tema, y agradecería una pequeña ayuda.

Gracias y un saludo.

santana
12-05-2004, 13:56:57
Creo recordar que este problema se daba a causa de un bug en la cabecera del paquete OWA (sobre la linea 8 o así, no estoy segura).

La variable num_cgi_vars se declara pero no se le da un valor inicial y se solucionaba cambiando la declaración asignandole valor 0 en la declaración.

El primer error se refiere a eso, el ORA-06512 te desaparecerá en cuanto soluciones el primero, más que un error es un advertencia respecto a que hay otros errores no tratados. No sé si me he sabido explicar.

Un saludo.

Igna
12-05-2004, 16:52:23
Gracias santana.

En efecto, con cambiar la declaración de la variable num_cgi_vars y darle un valor incial = 0 en el package OWA, ya no me da ese error.

Ahora el problema es que no me saca la página web cuando ejecuto ese procedimiento con un usuario (us2) distinto (que no sea el propietario del procedure (us1)). Me dice que no se puede encontrar la página. No tengo ni ides de porqué puede ser, pero lo he "arreglado" haciendo un procedimiento para el usuario us2 que se encarga de llamar al procedimiento del usuario us1, y después montar la web.

No se si ha quedado muy claro. Por si acaso, lo intento explicar un poco mejor:

us1 crea una función fun1, donde se realizan las operaciones complejas.
us2 crea un procedimiento que llama a fun1, y escribe código html sacando el resultado de fun1.

Bueno, espero que esté un poquito más claro. Lo malo de esto, es que se supone que tendré que crear ese procedimiento para cada usuario. Si alguien sabe como arreglar el error, le agradecería que me orientase un mínimo.

Gracias de nuevo, y un saludo.

santana
12-05-2004, 17:23:01
Hola.

¿El segundo usuario tiene concedido el privilegio EXECUTE sobre el procedimiento del primer usuario?

Igna
12-05-2004, 17:32:08
Sí que tiene el privilegio execute. Si lo ejecuto con el SQLPlus no me da ningún error. El problema es que no devuelve el códgio html.

Si ejecuto el procedimento con el primer usuario, y después pongo

SQL> execute owa_util.showpage;

me sale el código html:

Content-type: text/html
Content-length: 104
<HTML>
<HEAD>
<TITLE>current users</TITLE>
</HEAD>
<BODY>
<H1>current users</H1>
prueba
</BODY>
</HTML>

Si lo ejecuto con el 2 usuario, no me da ningún error, pero no me saca náda de código html.

No tengo ni idea de donde puede estar el problema.

De todas formas, gracias por tu ineterés.