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

AYUDA - create dentro de un begin

Estas en el tema de AYUDA - create dentro de un begin en el foro de Oracle en Foros del Web. hola buenas tardes a todos, soy nuevo en esto de las Base de datos.. mi problema es el sgte.. trato de crear una tabla a ...
  #1 (permalink)  
Antiguo 12/10/2010, 15:06
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 13 años, 6 meses
Puntos: 0
Exclamación AYUDA - create dentro de un begin

hola buenas tardes a todos,
soy nuevo en esto de las Base de datos..
mi problema es el sgte..
trato de crear una tabla a partir de otra ya creada.

utilizo la sgte sentencia

create table nombretabla AS select * from emp

hasta aqui todo bien, lo que me piden es crear una funcion o procedimiento que me realize esto, lo he hecho. me pero no se como utilizar este

esto es lo que tengo

CREATE OR REPLACE FUNCTION copiatabla (nombretabla in varchar2)
RETURN BOOLEAN
AS
resultado BOOLEAN;
resultado:=false;
BEGIN
EXECUTE IMMEDIATE 'create table nombretabla AS select * from emp';
resultado:=true;
return (resultado);
END;

al ejecutar me dice :

Función creada.


0,12 segundos

pero a la hora de hacer un vista de los datos de la nueva tabla que cree me dice que no exste

gracias
  #2 (permalink)  
Antiguo 12/10/2010, 15:55
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: AYUDA - create dentro de un begin

hola edwin9012

Si no estoy mal, la ejecución de operaciones DDL no se pueden hacer al interior de una función por lo que se estaría haciendo un COMMIT implicito por la sentencia y que por seguridad no debería dejar realizar.

Para esto, puedes utilizar a cambio un PROCEDURE que haga esta misma tarea.

Otra cosa que veo, es que como lo tienes, te va a crear una tabla llamada nombretabla ya que si está entre comillas no toma el valor que le ingresas por defecto.

Para esto debes hacer uso de SQL dinamico.

quedaría algo así:
Código SQL:
Ver original
  1. EXECUTE IMMEDIATE 'create table ' || nombretabla || ' AS select * from emp';

De esta forma si toma el nombre que le ingresas en el parametro de entrada.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: create
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 12:19.