Oracle
 sql >> база данни >  >> RDS >> Oracle

ORA-00933:SQL командата не е приключила правилно при изтриване на две таблици едновременно

Не можете да изтриете от две таблици в един израз - няма еквивалент на изтриване на insert all . (Освен ако нямате ограничения, които каскадно изтриват, или тригер, който прави това ръчно). Документацията показва, че вашият синтаксис не е валиден, тъй като няма път за указване на повече от една таблица.

Ще трябва да имате два оператора за изтриване, като първо премахнете записите от дъщерната таблица:

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

Вие можете променете ограничението на външния ключ на delete cascade :

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

... което би означавало, че ще трябва изрично да изтриете само от users маса; но това всъщност може да не е това, което искате, тъй като премахва едно ниво на валидиране - може да искате да предотвратите случайно премахване на родителски ключ, ако има деца. Издаването на две изтривания тук наистина не вреди.

Между другото, първата ви процедура не е ангажираща, което може би очаквате. В този ред:

    ...
    SELECT * FROM DUAL COMMIT;

... COMMIT се интерпретира като псевдоним за DUAL таблица, а не отделна команда. Ще ви трябва точка и запетая след DUAL и за предпочитане нов ред за COMMIT; . Но обикновено се смята, че е по-добре не да се ангажира в процедура и да позволи на извикващия от най-високо ниво да реши дали да се ангажира или да върне обратно, за да запази целостта на данните.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle.ManagedDataAccess до AWS RDS DB - TCPS:Невалиден SSL портфейл (магия)

  2. Как да използвате Oracle PL/SQL за създаване на десет подобни таблици от дадена изходна таблица на Oracle

  3. JBoss се свързва автоматично с базата данни, когато базата данни се рестартира/прекъсне връзката

  4. Проблем с променливите за свързване на Oracle, които не използват правилно индекса

  5. Четене на арабски текст от база данни на Oracle, кодирана в WE8ISO8859P1 с помощта на java