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

制約のためにデータベースを削除できません

    これを行う最良の方法は、C#コードのSQLステートメントではなく、ストアドプロシーを使用することです。参照されたレコードが参照されたテーブルにまだ存在し、cmd.ExecuteReader();を使用しているため、エラーが発生します cmd.ExecuteNonQuery();ではなく 。したがって、DBS2_MOVIE WHERE MOVIE_ID = :AccountIDのレコードを削除する必要があります テーブルDBS2_MOVIEに制約があるすべてのテーブルから。

    次のコードが役立つ場合があります:

    CREATE OR REPLACE PROCEDURE Delete_DBS2_MOVIE(p_MOVIE_ID IN DBS2_MOVIE.MOVIE_ID%TYPE)
    IS
    BEGIN
    
      --First delete p_MOVIE_ID from all the table where there is a constraint on DBS2_MOVIE 
      --i.e. all the constraints you are getting error for
      DELETE FROM XXX WHERE MOVIE_ID = p_MOVIE_ID
    
      DELETE FROM DBS2_MOVIE WHERE MOVIE_ID = p_MOVIE_ID;
    
    END;
    
    でエラーが発生するすべての制約

    C#コードを次のように変更します:

    public bool DeleteMovie(int MovieID)
    {
    
    
        string sql = "Delete_DBS2_MOVIE";
        try
        {
    
            this.Connect();
            OracleCommand cmd = new OracleCommand(sql, this.connection);
    
            cmd.Parameters.Add(new OracleParameter("p_MOVIE_ID", MovieID));
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
    
            cmd.ExecuteNonQuery();
    
    
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            throw;
        }
        finally
        {
            this.connection.Close();
        }
    
        return true;
    }
    


    1. SQL Serverに相当するOracleには、インデックスを作成するための列が含まれていました

    2. クラス内のPDOプリペアドステートメント

    3. ツリー階層を取得するためのCTE再帰

    4. postgres関数から一時テーブルを返す方法は?