1つのステートメントで2つのテーブルから削除することはできません。insert all
に相当する削除はありません。 。 (削除をカスケードする制約、またはそれを手動で行うトリガーがない限り)。 ドキュメント
複数のテーブルを指定するパスがないため、構文が無効であることを示しています。
最初に子テーブルからレコードを削除する、2つのdeleteステートメントが必要になります。
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
から明示的に削除するだけで済みます。 テーブル;ただし、1つのレベルの検証が削除されるため、実際には必要ない場合があります。子がある場合に親キーが誤って削除されるのを防ぐことができます。ここでは、2つの削除を発行してもそれほど問題はありません。
ちなみに、あなたの最初の手順はコミットしていません、それはあなたが期待しているかもしれません。この行の内容:
...
SELECT * FROM DUAL COMMIT;
... COMMIT
DUAL
のエイリアスとして解釈されます 個別のコマンドではなく、テーブル。 DUAL
の後にセミコロンが必要になります 、できればCOMMIT;
の新しい行 。しかし、それは一般的に良いと考えられています プロシージャでコミットし、データの整合性を維持するために、トップレベルの呼び出し元にコミットするかロールバックするかを決定させます。