variable - pedir parametros en sql server
ora-00933: El comando SQL no finalizó correctamente (2)
¿Podría estar recibiendo la violación de restricción única porque está insertando las mismas filas dos veces? ¿Se supone que "yo" debe usarse en la cláusula where de la declaración de inserción o realmente desea que las filas se inserten dos veces?
Su primera declaración tiene dos cláusulas FROM, por lo que está obteniendo un error de sintaxis.
select desp_id_seq.nextval,
dbms_random.string(''U'',5),
trunc(dbms_random.value(0000,9999)),
prod_id, --from dba_xy.product
prod_name from dba_xy.product;
Tengo el siguiente código:
begin
for i in 1..2 loop
insert into dba_xy.despatch
select desp_id_seq.nextval,
dbms_random.string(''U'',5),
trunc(dbms_random.value(0000,9999)),
prod_id from dba_xy.product
prod_name from dba_xy.product;
end loop;
fin;
Cuando lo ejecuto, Oracle me da el siguiente mensaje de error:
prod_name from dba_xy.product;
*
ERROR en la línea 8: ORA-06550: línea 8, columna 29: PL / SQL: ORA-00933: comando SQL no finalizado correctamente ORA-06550: línea 3, columna 2: PL / SQL: instrucción SQL ignorada
Lo que trato de hacer es vincular el prod_id y el prod_name existentes con los nuevos datos insertados en la tabla de despacho. He establecido prod_name como una clave única en la tabla de productos y prod_id como la clave principal y he establecido ambas como restricciones de clave externa en la tabla de envío. Necesito incluir el prod_name en la tabla de envío para permitir que los lectores de la tabla comprendan mejor qué nombre_de_producto debe encontrarse, etc., en lugar de simplemente dar el prod_id que no tendrá ningún sentido para ellos. Pero tal vez estaba pensando que no necesito prod_id en la mesa de despacho. Por favor ayuda.
Después de soltar la columna prod_id de la tabla de envío, modifiqué mi código:
begin
for i in 1..2 loop
insert into dba_xy.despatch
select desp_id_seq.nextval,
dbms_random.string(''U'',5),
trunc(dbms_random.value(0000,9999)),
prod_name from dba_xy.product;
end loop;
fin; /
y apareció el siguiente mensaje de error sobre la restricción única: begin * ERROR en la línea 1: ORA-00001: restricción única (DBA_XY.PROD_NAME_UC) viola ORA-06512: en la línea 3
Su error ORA-00933 se debe a una instrucción SELECT mal formateada:
SELECT desp_id_seq.nextval,
dbms_random.string(''U'',5),
TRUNC(dbms_random.value(0000,9999)),
prod_id from dba_xy.product
prod_name from dba_xy.product;
... cuando debería ser:
SELECT DESP_ID_SEQ.nextval,
DBMS_RANDOM.string(''U'',5),
TRUNC(DBMS_RANDOM.value(0000,9999)),
t.prod_id,
t.prod_name
FROM dba_xy.product t;
prod_id
la coma para separar las columnas prod_id
y prod_name
, y además tenía una declaración FROM dba_xy.product redundante en la ubicación incorrecta.
Dicho esto, la tabla dba_xy.despatch
solo debe contener el prod_id. Si necesita proporcionar una versión legible por humanos de los datos, le recomiendo que construya una vista . Ejemplo:
CREATE VIEW despatch_vw AS
SELECT t.prod_id,
p.prod_name
FROM dba_xy.despatch t
JOIN dba_xy.product p ON p.prod_id = t.prod_id