sql >> データベース >  >> RDS >> Oracle

ORA-00933:2つの表を同時に削除すると、SQLコマンドが正しく終了しませんでした

    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;の新しい行 。しかし、それは一般的に良いと考えられています プロシージャでコミットし、データの整合性を維持するために、トップレベルの呼び出し元にコミットするかロールバックするかを決定させます。




    1. MySQL C#非同期メソッドが機能しませんか?

    2. Oracle分散データベースとMSVC

    3. エラーが発生しました:SQLSTATE[HY000][2005]不明なMySQLサーバーホスト

    4. mysql.procの列数が間違っています。予想20、16が見つかりました。テーブルが破損している可能性があります