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

esta bien mi insert? Error SQL: ORA-00947

Estas en el tema de esta bien mi insert? Error SQL: ORA-00947 en el foro de Oracle en Foros del Web. hola, bueno estoy haciendo un insert y la verdad es que no me sale... invente algo que no se si esta bien o no... dejo ...
  #1 (permalink)  
Antiguo 24/01/2012, 13:54
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 14 años, 5 meses
Puntos: 6
esta bien mi insert? Error SQL: ORA-00947

hola, bueno estoy haciendo un insert y la verdad es que no me sale...
invente algo que no se si esta bien o no...

dejo el codigo:

Código SQL:
Ver original
  1. INSERT INTO "SYSTEM"."CONTROL_PERMISOS"  ( usuario, rol, vigencia, creado, expira)  VALUES  
  2.    ( grantee, granted_role, (SELECT created FROM dba_users), (SELECT expiry_date FROM dba_users) )
  3.    FROM dba_role_privs;

ahora dejo el mensaje que me arroja:

Error SQL: ORA-00947: no hay suficientes valores

ojala me puedas ayudar...
de ante mano muchas gracias!

Saludos!
  #2 (permalink)  
Antiguo 24/01/2012, 14:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: esta bien mi insert? Error SQL: ORA-00947

Código SQL:
Ver original
  1. INSERT INTO "SYSTEM"."CONTROL_PERMISOS"  (
  2.     usuario,
  3.     rol,
  4.     vigencia,
  5.     creado,
  6.     expira)  
  7. VALUES (
  8.     grantee,
  9.     granted_role,
  10.     (SELECT created FROM dba_users),
  11.     (SELECT expiry_date FROM dba_users)
  12.     )
  13.    FROM dba_role_privs;
A ver si poniéndolo así te das cuenta dónde están los errores (hay más de uno)...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/01/2012, 14:08
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 14 años, 5 meses
Puntos: 6
Respuesta: esta bien mi insert? Error SQL: ORA-00947

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código SQL:
Ver original
  1. INSERT INTO "SYSTEM"."CONTROL_PERMISOS"  (
  2.     usuario,
  3.     rol,
  4.     vigencia,
  5.     creado,
  6.     expira)  
  7. VALUES (
  8.     grantee,
  9.     granted_role,
  10.     (SELECT created FROM dba_users),
  11.     (SELECT expiry_date FROM dba_users)
  12.     )
  13.    FROM dba_role_privs;
A ver si poniéndolo así te das cuenta dónde están los errores (hay más de uno)...

uff amigo lo acabo de ver y probar... y ahora me sale el siguiente error:

Error SQL: ORA-00933: comando SQL no terminado correctamente

el código me quedo así:

Código SQL:
Ver original
  1. INSERT INTO "SYSTEM"."CONTROL_PERMISOS"  (
  2.  usuario,
  3.  rol,
  4. creado,
  5. expira
  6. )  
  7. VALUES (
  8.  grantee,
  9. granted_role,
  10. (SELECT created FROM dba_users),
  11. (SELECT expiry_date FROM dba_users)
  12.  )
  13.    FROM dba_role_privs;


donde esta el problema???..otra cosa, ...esos SELECT que tengo entremedio; estan bien asi?, se puede hacer eso??

Saludos y gracias!
  #4 (permalink)  
Antiguo 24/01/2012, 15:30
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: esta bien mi insert? Error SQL: ORA-00947

Cita:
INSERT INTO "SYSTEM"."CONTROL_PERMISOS" (
usuario,
rol,
vigencia,
creado,
expira)
VALUES (
grantee,
granted_role,
(SELECT created FROM dba_users),
(SELECT expiry_date FROM dba_users)
)
FROM dba_role_privs;
El problema lo tienes porque las subconsultas sobre la dba_users devuelven más de un registro cada registro de la dba_role_privs, tendrías que utilizar la sintaxis:

Código:
insert into system.control_permisos  (
 usuario, 
 rol, 
 vigencia, 
 creado, 
 expira) 
select 
 dba_role_privs.grantee,
 dba_role_privs.granted_role,
 dba_users.created,
 dba_users.expiry_date
from dba_role_privs, dba_users
where
 dba_role_privs.grantee = dba_users.username;
Finalmente, no tengo claro si esto que planteas es solo un ejemplo o una necesidad real, en caso de lo segundo, puedes crear una vista para evitar tener una tabla y cargar los datos:

Código:
create or replace view system.control_permisos
as
select 
 dba_role_privs.grantee,
 dba_role_privs.granted_role,
 dba_users.created,
 dba_users.expiry_date
from dba_role_privs, dba_users
where
 dba_role_privs.grantee = dba_users.username;
Saludos
  #5 (permalink)  
Antiguo 25/01/2012, 03:41
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 14 años, 5 meses
Puntos: 6
Respuesta: esta bien mi insert? Error SQL: ORA-00947

MUCHAS GRACIAS!!!!
en verdad muchas gracias, no sabia que se podía hacer de la forma "tabla.campo"

te pasaste
Solucionado el tema
Saludos y gracias nuevamente!!!




Cita:
Iniciado por matanga Ver Mensaje
El problema lo tienes porque las subconsultas sobre la dba_users devuelven más de un registro cada registro de la dba_role_privs, tendrías que utilizar la sintaxis:

Código:
insert into system.control_permisos  (
 usuario, 
 rol, 
 vigencia, 
 creado, 
 expira) 
select 
 dba_role_privs.grantee,
 dba_role_privs.granted_role,
 dba_users.created,
 dba_users.expiry_date
from dba_role_privs, dba_users
where
 dba_role_privs.grantee = dba_users.username;
Finalmente, no tengo claro si esto que planteas es solo un ejemplo o una necesidad real, en caso de lo segundo, puedes crear una vista para evitar tener una tabla y cargar los datos:

Código:
create or replace view system.control_permisos
as
select 
 dba_role_privs.grantee,
 dba_role_privs.granted_role,
 dba_users.created,
 dba_users.expiry_date
from dba_role_privs, dba_users
where
 dba_role_privs.grantee = dba_users.username;
Saludos

Etiquetas: insert, select, sql
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 20:43.