Intercambio de tablas

Hola Ligarius, necesito saber como hago lo siguiente :
si el valor = 1 entonces
delete tabla1
;
sino
delete tabla 2
fin si
Parece sencillo, pero el asunto es que no quiero repetir esta instrucción (delete dos veces) pues es bastante grande ...
Si reemplazo la tabla por una variable que contenga el valor de la tabla ej:
tabla := clientes
delete tabla..
Me retorna error de no existencia de tabla...
Dime como llevarlo a cabo, agradecido
1

1 Respuesta

2.025 pts.
Bueno para hacer lo que me cuentas existen tres maneras...
1.- No importando la base de datos (puede ser 7.3, 8, 8i), simplemente copies el código, pero tú sabes hay que mantener la modularidad, no es muy buena la opción
2.- Si ocupas una base de datos 7.3 u 8, puedes ocupar el procedimiento almacenado DBMS_SQL, que puede ejecutar en bases de datos sql dinámicos
3.- O si ocupas una versión igual o superior (aunque creo no hay nada superior a la ochoi, está en proyecto la 9i), puedes ocupar el dbms_sql, pero mejorado EXECUTE IMMEDIATE
Me gustaría saber ¿Qué base de datos ocupas?
En estos momentos trabajamos en una base de datos oracle ocho i, con sistema operativo unix
Bien, entonces debiésemos aplicar más o menos el siguiente código...
(Puede ser que sufra ciertas modificaciones, pero en el fondo el PL sigue igual)
Declare
tabla varchar2(30);
Begin
.
.
If valor = 1 then
tabla := 'tabla1'; --Nombre válido para una tabla de la base de datos
else
tabla := 'tabla2'; --Nombre válido para una tabla de la base de datos
end if;
begin
execute immediate 'delete '||tabla
exceptions
when others then
DBMS_OUTPUT.PUT_LINE('Error al borrar tabla :'||tabla);
end;
-- Con esto obtienes un sql dinámico el cual es muy útil y puede ser usado
-- Con todas las sentencias sql..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas