Pregunta sobre sequence en Oracle y java

831 views
Skip to first unread message

Jaime Galindo

unread,
Mar 26, 2007, 12:12:33 PM3/26/07
to jav...@googlegroups.com

Compañeros, tengo un pequeño problema con java al querer insertar en una tabla un valor relacionado a un sequence en oracle.

 

Imaginense una tabla x con dos campos:

 

Id number(18)

Nombre varchar2(30)

Direccion varchar2(30)

 

Creamos una sequence en oracle para utilizarla en la tabla x.

 

Creo una tabla y que tiene 2 campos

 

Nombre varchar2(30)

Direccion varchar2(30)

 

Le inserto valores a la tabla y.

 

 

Luego yo quiero hacer un insert a la tabla x de la siguiente forma

 

Insert into x select secuencia.nextvalue, Nombre, Direccion from y

 

Me da el siguiente error en java cuando lo hago a traves de un PreparedStatement:

 

java.sql.SQLException: ORA-01008: not all variables bound

 

 

El punto es el siguiente: Quiero hacer el insert en la tabla x a partir de cuantos registros tenga en la tabla y.

Pero deseo que el correlativo Id salga a partir de la secuencia creada.

 

Se que hay otra forma de hacerlo, pero yo quiero utilizar el Insert combinado con el Select en Oracle.

 

He buscado un buen rato en sitios de Internet para ver la sintaxis, pero no he hallado uno que me diga si se puede hacer esto o no se puede.

 

Si alguien ya hizo esto favor enviar un codigo de ejemplo en java o al menos algun sitio donde seguir investigando.

 

Gracias por toda su ayuda.

 


--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 268.18.18/733 - Release Date: 25/03/2007 11:07

Pablo Molnar

unread,
Mar 26, 2007, 1:56:37 PM3/26/07
to jav...@googlegroups.com
Me parece que tenes mal escrita la sentencia y como buscas el valor en la secuencia, proba con esto:

INSERT INTO x VALUES (secuencia.NEXTVAL, 'Pablo', 'Bs AS');

Saludos

Pablo Molnar

El día 26/03/07, Jaime Galindo <jgal...@mh.gob.sv> escribió:

Capitan Amarillo

unread,
Mar 26, 2007, 2:08:36 PM3/26/07
to jav...@googlegroups.com
Hola, proba esto:

insert into x (Id, Nombre, Direccion)
select secuencia.nextvalue, y.Nombre, y.Direccion
from y;


Fuera de esto, al no utilizar un where, le estas pidiendo que pase todos los registros de la tabla y. Esto es lo que necesitas?


Saludos.
A.-






El día 26/03/07, Jaime Galindo <jgal...@mh.gob.sv> escribió:

Compañeros, tengo un pequeño problema con java al querer insertar en una tabla un valor relacionado a un sequence en oracle.

Jaime Galindo

unread,
Mar 26, 2007, 2:11:00 PM3/26/07
to jav...@googlegroups.com

Tenes razon, le voy a agregar una clausula where para condicionar.

 

Te pregunto, tienes algun ejemplo con java donde utilices PreparedStatement?

 

Te agradeceria mucho pudieras enviarmelo.

 

 


--
No virus found in this incoming message.


Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 268.18.18/733 - Release Date: 25/03/2007 11:07

Daniel

unread,
Mar 26, 2007, 3:00:42 PM3/26/07
to JavaSOS
El problema q vas a tener de hacerlo asi, es q vas a perder el numero
de la secuencia (que en tu caso es el id), ademas, si algo falla, no
vas a poder saber si fue la generacion de la secuencia o tu insert
Se que aclaraste que lo querias hacer en la misma linea, pero las
buenas practicas dicen que primero deberias hacer el select del
nextval y luego el insert
De todas formas, el codigo valido es el que posteo pablo antes

INSERT INTO x VALUES (secuencia.NEXTVAL, 'Pablo', 'Bs AS');

Saludos

José Fuentes

unread,
Mar 26, 2007, 3:49:55 PM3/26/07
to jav...@googlegroups.com
¿No es " INSERT INTO x VALUES ( (select secuencia.nextval from dual), 'Pablo', 'Bs AS');  "?
 
Jose

 

Pablo Molnar

unread,
Mar 27, 2007, 9:39:35 AM3/27/07
to jav...@googlegroups.com
En mi versión de oracle esta sentencia no es válida (9i) :

 INSERT INTO x VALUES ( (select secuencia.nextval from dual), 'Pablo', 'Bs AS');

Tira el siguiente error --> ORA-02287: sequence number not allowed here
Otra manera de simular un autonumérico es con un trigger:

declare

id number;

begin

  select secuencia.nextval into id from dual;

  :new.id : = id;

end ;

La cláusula del insert te quedaría:

INSERT INTO x (nombre,ciudad) VALUES ('Pablo', 'Bs AS')


Sldos.

Pablo Molnar

Ezequiel Apfel

unread,
Mar 27, 2007, 5:14:41 PM3/27/07
to jav...@googlegroups.com
No te acepta el el select a dentro del values del insert.
Una manera de resolverlo es armar un pl que te devuelva el numero de secuencia.
ej:
CREATE OR REPLACE FUNCTION f_get_sequence()
RETURN NUMBER
AS
i_return NUMBER;
BEGIN
SELECT tu_sequencia.NEXTVAL INTO i_return FROM dual;
RETURN i_return;
END;
/
INSERT INTO x VALUES (f_get_sequence(),'Pablo', 'Bs AS');

si queres tener mas de una secuencia pasale como parametro el nombre
de tu sequencia y pone un case por cada sequencia y listo


> El 27/03/07, Pablo Molnar <pablo...@gmail.com> escribió:

Jaime Galindo

unread,
Mar 28, 2007, 9:24:15 AM3/28/07
to jav...@googlegroups.com
Ezequiel, gracias por este tip tan bueno que envias.

Perdona la molestia, pero tienes un codigo java para invocar la funcion
f_get_sequence.

Gracias por la ayuda.


-----Mensaje original-----

Ezequiel Apfel
Enviado el: martes, 27 de marzo de 2007 15:15


Para: jav...@googlegroups.com
Asunto: [JavaSOS] Re: Pregunta sobre sequence en Oracle y java

--
No virus found in this incoming message.


Checked by AVG Free Edition.

Version: 7.5.446 / Virus Database: 268.18.20/736 - Release Date: 27/03/2007
16:38

--
No virus found in this outgoing message.
Checked by AVG Free Edition.

Version: 7.5.446 / Virus Database: 268.18.20/736 - Release Date: 27/03/2007
16:38

Ezequiel Apfel

unread,
Mar 30, 2007, 5:16:18 PM3/30/07
to jav...@googlegroups.com
No tengo ningun ejemplo porque en todas las aplicaciones que hago uso
hibernate (definis en el mapa la sequencia del oracle y el framework
resuelve solo como usarla).
Te paso 2 paginas donde explican como invocar un pl/sql desde java con
jdbc, es muy facil asi que no creo que tengas problemas.
Saludos.
++
Ah las url son
http://www.samspublishing.com/articles/article.asp?p=26251&seqNum=6&rl=1
http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/callablestatement.html

El 28/03/07, Jaime Galindo <jgal...@mh.gob.sv> escribió:

Reply all
Reply to author
Forward
0 new messages