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

Procedimientos genéricos en Oracle

Estas en el tema de Procedimientos genéricos en Oracle en el foro de Oracle en Foros del Web. Hola, comunidad. Estoy iniciándome en Oracle y quisiera saber si existe alguna forma de crear procedimientos/funciones que trabajen con nombres de tablas pasadas por parámetros. ...
  #1 (permalink)  
Antiguo 22/04/2010, 16:25
Avatar de Kluster  
Fecha de Ingreso: agosto-2005
Ubicación: Cuba
Mensajes: 86
Antigüedad: 15 años, 2 meses
Puntos: 1
Procedimientos genéricos en Oracle

Hola, comunidad.
Estoy iniciándome en Oracle y quisiera saber si existe alguna forma de crear procedimientos/funciones que trabajen con nombres de tablas pasadas por parámetros. Por ejemplo, algo como esto:

create or replace procedure insertar_generico(tabla varchar2, columna varchar2, valor varchar2)
is
begin
insert into tabla(columna) values (valor);
end;

Y de la misma manera para abrir un cursor.
Es posible?

Gracias.
  #2 (permalink)  
Antiguo 23/04/2010, 00:23
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 13 años, 4 meses
Puntos: 43
Respuesta: Procedimientos genéricos en Oracle

Usa sql dinamico.
  #3 (permalink)  
Antiguo 23/04/2010, 08:20
Avatar de Kluster  
Fecha de Ingreso: agosto-2005
Ubicación: Cuba
Mensajes: 86
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Procedimientos genéricos en Oracle

Ok, voy por esa vía a ver qué encuentro... gracias
  #4 (permalink)  
Antiguo 23/04/2010, 15:37
 
Fecha de Ingreso: enero-2010
Mensajes: 29
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: Procedimientos genéricos en Oracle

Procedimientos genéricos se debe hacer con SQL dinámico como jc3000 dijo..

Pero si lo único que quiero es ejecutar algunas insertar pasando tabla diferente y nombres de columna, ¿por qué no ejecutar esta en sqlplus, utilizando variables de sustitución? [But if all you want is run some insert passing different table and column names, why not just run this in sqlplus, using substitution variables?]

insert into &tabla(&columna) values (&valor);

Usted va a se le pida que proporcione los nombres.

Última edición por yong321; 23/04/2010 a las 19:45
  #5 (permalink)  
Antiguo 27/04/2010, 23:31
 
Fecha de Ingreso: julio-2009
Mensajes: 28
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Procedimientos genéricos en Oracle

-- CREACION DE UN CURSOR PARA UTILIZARLO EN NUESTRO PROCEDIMIENTO
create or replace package types
as
type typecursor is ref cursor;
end;





-- CREACION DE UN PROCEDURE QUE INSERTA REGISTROS + EL CODIGO AUTOGENERADO E INCREMENTADO
create or replace procedure spgenera( -- CREANDO EL PROCEDURE
nomp in articulos.art_nom%type, --VARIABLES K COINCIDEN CON LA TABLA
uni in articulos.art_uni%type, -- SE PONE (%TYPE) PARA YA NO DECLARAR DE QUE TIPO ES, SINO QUE DECIMOS K ES DEL TIPO DE REGISTRO DE LA TABLA
puni in articulos.art_pre%type,
stk in articulos.art_stk%type,
pcursor out types.typecursor) -- ESETE ES EL CURSOR
as
cod char(5); --VARIABLE LOCAL PARA CONCATENAR EL NUEVO CODIGO
nro int; -- PARA INCREMENTAR EL NUMERO
begin
select nvl(max(art_cod),'00000') into cod from articulos;-- (NVL) PARA VALIDAR QUE NO SEA NULO Y LO GUARDAMOS EN LA VARIABLE cod Y SI ESTUVIERA NULO SEPONE 0000
nro:= substr(cod,2,4)+1; -- DEL ULTIMO CODIGO EXTRAEMOS LOS NUMEROS
cod:='A' ||trim(to_char(nro,'0000')); -- CONCATENAR LA CADENA K ES X DEFAULT (A) + EL NUMERO YA INCREMENTADO
insert into articulos values(cod,nomp,uni,puni,stk);--INSERTANDO LA DATA
commit; -- EJECIUTA LA TRANSACCION
open pcursor for--ABRIMOS EL CURSOR PARA LEER EL CODIGO INCREMENTADO EN CASO K SE KICIERA IMPRIMIRLO
select max(art_cod) from articulos; -- IMPRIMIENDO EL CODIGO DEL NUEVO REGISTRO QUE SE ACABA DE INSERTAR
end; -- FINALIZANDO EL PROCEDURE

SELECT art_cod FROM articulos -- A0011


:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::



[URL="http://my.opera.com/eldavan"]
[B]PUEDES ENCONTRAR PROYECTOS COMPLETOS EN C# CON BASE DE DATOS ORACLE EN MI BLOG[/B]
[/URL]

Etiquetas: procedimiento
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 18:50.