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

Insertar en Tabla Anidada

Estas en el tema de Insertar en Tabla Anidada en el foro de Oracle en Foros del Web. Hola, quiero insertar una compra de un cliente, la primary key de la tabla cliente es DNI. Para insertar hago lo siguiente: INSERT INTO OrdenCompra ...
  #1 (permalink)  
Antiguo 16/09/2010, 09:03
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 0
Insertar en Tabla Anidada

Hola, quiero insertar una compra de un cliente, la primary key de la tabla cliente es DNI.

Para insertar hago lo siguiente:

INSERT INTO OrdenCompra
SELECT 1, REF(C), LineaCompra_TipoAnidada()
FROM Cliente C
WHERE C.Nombre = 'Juan ...'
/

INSERT INTO THE (
SELECT O.LineaCompra_Anidada
FROM OrdenCompra O
WHERE O.IdCompra = 1)
SELECT 1, 1, REF(A)
FROM Articulo A
WHERE A.Nombre = 'XXX'
/

Pero me dice que C.Nombre no es un identificador válido. Sólo funciona si lo hago sobre DNI que es la clave primaria, ¿no es posible hacer una inserción o una consulta sobre un campo que no es pk? si no es así que estoy haciendo mal.

Muchas gracias.
  #2 (permalink)  
Antiguo 16/09/2010, 09:15
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: Insertar en Tabla Anidada

Juanxml... por si no lo has notado, cuando realizas las preguntas, asumes que las personas que leen tu post saben muchas cosas que si no nos las dices no tenemos como saberlo.

LineaCompra_TipoAnidada() es una función? Que hace? Cual es su estructura?

Podrías postear el describe de OrdenCompra?
DESCRIBE OrdenCompra;

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 17/09/2010, 06:39
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Insertar en Tabla Anidada

Tienes razón, mi objeto orden compra es el siguiente:

CREATE TYPE OrdenCompra_TipoObjeto AS OBJECT (
IdCompra NUMBER,
RefCliente REF Cliente_TipoObjeto,
LineaCompra_Anidada LineaCompra_TipoAnidada);
/

y líneacompra:


CREATE TYPE LineaCompra_TipoObjeto AS OBJECT (
IdLineaCompra NUMBER,
Cantidad NUMBER,
RefArticulo REF Articulo_TipoObjeto);
/

Tabla orden compra:

CREATE TABLE OrdenCompra OF OrdenCompra_TipoObjeto
(IdCompra PRIMARY KEY,
FOREIGN KEY (RefCliente) REFERENCES Cliente)
NESTED TABLE LineaCompra_Anidada STORE AS TA_Compra
((PRIMARY KEY (NESTED_TABLE_ID, IdLineaCompra)))
/


El describe de OrdenCompra:

Nombre Nulo? Tipo

IdCompra NotNull Number
RefCliente Ref of Cliente_TipoObjeto
LineaCompraAnidada LineaCompra_TipoAnidada
  #4 (permalink)  
Antiguo 17/09/2010, 07:29
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: Insertar en Tabla Anidada

Cita:
Pero me dice que C.Nombre no es un identificador válido. Sólo funciona si lo hago sobre DNI que es la clave primaria, ¿no es posible hacer una inserción o una consulta sobre un campo que no es pk? si no es así que estoy haciendo mal.
Si no estoy mal, REF es utilizado para el llamado del campo primary key de la tabla creada. Para el acceso a los otros atributos creo que debes utilizar DEREF.

mira en este pdf en el apartado 1.2.2. Inserción de referencias.

nos cuentas como te va.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 18/09/2010, 04:37
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Insertar en Tabla Anidada

Gracias por el enlace, pero yo al insertar un cliente en una orden de compra lo que quiero insertar es una Referencia a ese cliente.

De ahí que use:

INSERT INTO OrdenCompra
SELECT 1, REF(C), LineaCompra_TipoAnidada()
FROM Cliente C
WHERE C.Nombre = 'Juan'
/

Inserto 1 como IdCompra, REF(C) que será la Referencia al Cliente y la Tabla Anidada.

Si uso C.DNI=7777... no da error, pero de la otra manera me dice que C.Nombre no es un identificador válido, he probado con DEREF pero el mensaje de error es el mismo, que no es un identificador válido.

A ver si a alguien se le ocurre algo, porque estoy probando de todo y no consigo solucionarlo.

Si necesitan más información de mi bd diganmelo, muchas gracias ;)

Etiquetas: tablas
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 17:31.