Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

funcion plsql

Estas en el tema de funcion plsql en el foro de Oracle en Foros del Web. Hola Buenos días; Necesito ayuda con esta función. create or replace FUNCTION DESHABILITARMERUTMESEMDETR06 RETURN NUMBER AS BEGIN EXECUTE IMMEDIATE 'alter table ME_RUTINAMENUSEMANALDETALLE disable constraint ME_RUTINAMENUSEMDETALLE_R06'; ...
  #1 (permalink)  
Antiguo 03/04/2012, 02:49
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años, 1 mes
Puntos: 7
funcion plsql

Hola Buenos días;

Necesito ayuda con esta función.

create or replace
FUNCTION DESHABILITARMERUTMESEMDETR06 RETURN NUMBER
AS
BEGIN

EXECUTE IMMEDIATE 'alter table ME_RUTINAMENUSEMANALDETALLE disable constraint ME_RUTINAMENUSEMDETALLE_R06';

RETURN 1;

EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error en la función DESHABILITARMERUTMESEMDETR06.');
RETURN 0;
END DESHABILITARMERUTMESEMDETR06;

Me pasa lo siguiente; si ejecuto manualmente el alter table que hay dentro de esa función, todo me funciona correctamente pero si ejecuto la función que e escrito siempre me va a la excepción y querría saber por que y como arreglarlo.

Espero vuestra ayuda.

Y muchas gracias;
  #2 (permalink)  
Antiguo 03/04/2012, 16:36
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: funcion plsql

El fallo se puede dar por varios motivos, para saber el error en concreto modifica el código de la función para que devuelva el mensaje de error.

Código:
create or replace function...
....
when others then
 dbms_output.put_line( to_char(SQLCODE) || ' ' || SQLERRM );
end;
Saludos
  #3 (permalink)  
Antiguo 07/04/2012, 09:24
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: funcion plsql

Posiblemente le esté dando el error de PRIVILEGIOS INSUFICIENTES.

Ese tipo de sentencias solo se pueden ejecutar con el usuario propietario.

O el ORA-0054 " recurso ocupado ".........pero a ver que nos dice.
  #4 (permalink)  
Antiguo 18/04/2012, 03:10
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años, 1 mes
Puntos: 7
Respuesta: funcion plsql

Hola muchas gracias por las respuestas y siento no haber contestado antes.

La verdad es que si me daba este error PRIVILEGIOS INSUFICIENTES pero ya esta solucionado.

E echo lo que matanga me ha puesto:

create or replace function...
....
when others then
dbms_output.put_line( to_char(SQLCODE) || ' ' || SQLERRM );
end;

La solución es la que a comentado jc300: Ese tipo de sentencias solo se pueden ejecutar con el usuario propietario.

Muchas gracias
__________________
Gracias por todo;

Un saludo
  #5 (permalink)  
Antiguo 18/04/2012, 10:04
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: funcion plsql

Si, es un tipo de error que suele desconcertar al que no lo ha vivido.

En definitiva, es una sentencia DDL y las sentencias DDL solo las puede ejecutar el propietario del objeto en cuestión......... salvo un usuario DBA.

Lo que no podría asegurarte ( no estoy en el curro y no puedo probarlo ) es si con execute immediate funcionaria con un user DBA.

En SQL puro y duro si, vamos, desde el sql plus por ejemplo, eso te lo confirmo ya. En mi curro todos los DDL los hago con un user DBA, así no tengo que andar cambiando conexiones y demas........., pero con EXECUTE IMMEDIATE no estoy seguro.

Etiquetas: funcion, plsql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:25.