Solo para expertos(eso creo)

mandrake
05 de Febrero del 2004
Hola a todos, no tengo mucho tiempo de interactuar con oracle, pero actualmente estoy desarrollando una aplicación que tiene que interactuar con una base de datos orale, y tengo el siguiente problema:

Mi aplicación está desarrollada en delphi, en delphi hago una seria de consultas de las cuales como resultado obtengo una cadena en donde tengo o se supone que hay un conjunto de claves, las cuales cumplen ciertas condiciones, por ejemplo: 'clave1,clave2,...clave2',
ok, ahora necesito pasar esa cadena a un procedure que he realizado en oracle, en el cual utilizo el operador in, por lo cual, como es lógio necesito que la cadena sea convetida a conjunto, yo pensé que simplemente enviaba la cadena y ya, pero me marca error, porque oracle pone comillas a la cadena, a continuación ilustro el problema:


select * from tabla where clave in (claves)

deberia ser:
select * from tabla where clave in (clave1,clave2,....claven)

pero oracle me pone:
select * from tabla where clave in ('clave1,clave2,....claven'); por lo cual nunca obtengo nada en dicha consulta


si alguien sabe como le hago, please, le agreceré el tip's

bye


maverick2kevolution
05 de Febrero del 2004
Hola:

No te entendi mucho pero ojala que te ayude en algo este codigo :).

-- Tabla que contendra las claves
create table P1(
clave1 integer,
clave2 integer,
clave3 integer
);

-- Tabla donde almacenaremos los valores seleccionados
create table p2(
valor1 integer,
valor2 integer,
valor3 integer
);


insert into p1 values ('1','1','1');
insert into p1 values ('2','2','1');
insert into p1 values ('3','1','2');
insert into p1 values ('4','2','1');
insert into p1 values ('5','1','6');
insert into p1 values ('6','3','5');
insert into p1 values ('7','1','4');
commit;

--Procedimiento que inserta los datos en la tabla p2, dependiendo de
-- cl1, cl2, cl3 ( clave1, clave2, clave2)
create or replace procedure Procedimiento(cl1 integer, cl2 integer, cl3 integer) is
begin
insert into p2
select * from p1 where clave1 in (cl1,cl2,cl3);
end Procedimiento;

Nota: en procedimiento y en funciones cuando tu haces un solo select lo mas probable es que te salga un error debido a que se espera que tu uses la clausula INTO para asignar a una variable.