sql >> Base de Datos >  >> RDS >> Oracle

ORA-00933:El comando SQL no finalizó correctamente al eliminar dos tablas al mismo tiempo

No puede eliminar de dos tablas en una declaración; no hay un equivalente de eliminación de insert all . (A menos que tenga restricciones que encadenen la eliminación, o un disparador que lo haga manualmente). La documentación muestra que su sintaxis no es válida, ya que no hay una ruta para especificar más de una tabla.

Deberá tener dos declaraciones de eliminación, eliminando primero los registros de la tabla secundaria:

  DELETE FROM login 
  WHERE login.id_user_login = p_id_user;
  DELETE FROM users
  WHERE users.id_user = p_id_user;

podrías cambie su restricción de clave externa a delete cascade :

alter table login add constraint login_fk_user foreign key (id_user_login)
references users(id_user) on delete cascade;

... lo que significaría que solo tendría que eliminar explícitamente de los users mesa; pero es posible que eso no sea lo que desea, ya que elimina un nivel de validación; es posible que desee evitar que una clave principal se elimine accidentalmente si tiene hijos. Emitir dos eliminaciones realmente no duele aquí.

Por cierto, su primer procedimiento no se compromete, lo que podría estar esperando. En esta línea:

    ...
    SELECT * FROM DUAL COMMIT;

... el COMMIT se interpreta como un alias para DUAL tabla, no un comando separado. Necesitaría un punto y coma después de DUAL , y preferiblemente una nueva línea para COMMIT; . Pero generalmente se considera mejor no confirmar en un procedimiento y dejar que la persona que llama de nivel superior decida si confirmar o retroceder para preservar la integridad de los datos.