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

Не може да се изтрие в базата данни поради ограничения

Най-добрият начин да го направите е като използвате съхранена процедура, а не sql оператор в C# код. Получавате грешка, тъй като референтните записи все още присъстват в референтната таблица и използват 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Отстранете дялове, по-стари от 2 месеца

  2. Преобразувайте клеймо за време/дата и час от UTC в EST Oracle SQL

  3. Ефективен подход за попълване на временната таблица

  4. Съхраняване на множество стойности за едно поле в база данни

  5. Стратегия на Oracle Pagination