2013-09-18 4 views
1

Кто-нибудь знает, как я могу обновлять данные в таблице после операций вставки, удаления и обновления? У меня есть простая таблица:После удаления или обновления или обновления таблицы обновления

create table EV_JOURNAL (EVENT_TO_TASK_ID NUMBER(3) 
NOT NULL Check(EVENT_TO_TASK_ID>0), EVENT_TIME TIMESTAMP WITH TIME ZONE NOT NULL); 

// таблица, созданная я нашел некоторую информацию о триггерах и написал после вставки, удаления и запуска обновления:

create or replace 
TRIGGER AFT_INS_UPD_DEL_TRIG 
    AFTER Insert or Delete or Update ON EV_JOURNAL 
    For Each Row 
    DECLARE 
    BEGIN 
    INSERT INTO EV_JOURNAL(EVENT_TO_TASK_ID,EVENT_TIME) 
    VALUES(:NEW.EVENT_TO_TASK_ID, :NEW.EVENT_TIME); 
    END AFT_INS_UPD_DEL_TRIG; 

Но когда я пытаюсь вставить данные в таблицу, что-то вроде этого:

Insert into ev_journal (event_time,event_to_task_id) values(systimestamp,2); 

у меня есть следующие ошибки: SQL Error: ORA-04091: таблица EV_JOURNAL мутирует, триггер/функция может не видеть его; ORA-04088: ошибка во время запуска триггера; Может ли кто-нибудь помочь мне в этой ситуации? Мне нужно только обновить таблицу, и все, но я не могу понять, как это сделать.

код из моего C# приложения, где мне нужно использовать обновленные данные из данной таблицы:

public static List<EventTrigger> FillEventTriggerList (List<EventTrigger> list) 
     {    
      using (OracleConnection connection = new OracleConnection (connectionString)) 
      { 
       connection.Open(); 
       string sqlText = "Select * From EV_JOURNAL"; 
       OracleCommand command = new OracleCommand (sqlText, connection); 
       OracleDataReader reader = command.ExecuteReader(); 
       while (reader.Read()) 
       {        
        list.Add (new EventTrigger (int.Parse(reader [ "EVENT_TO_TASK_ID" ].ToString()),(DateTime)(reader [ "EVENT_TIME" ]))); 
       } 
      } 
      return list; 
     } 

Так что, когда я, скажем, удалить некоторые строки из EV_JOURNAL, после этого запроса, которую я получаю старые данные, которые должны быть уже удаленным, но это становится так, только после того, как я нажму обновить таблицу в базе данных.

Благодаря

ответ

2

Это не имеет смысла - вы обнаруживая изменения в таблицу и реогировать вставляя те же строки в ту же таблицу.

Возможно, вы можете объяснить, что вы подразумеваете под «обновлением» таблицы.

Редактировать: вы не щелкаете обновлением в базе данных, вы нажимаете кнопку обновления в каком-либо инструменте, который обращается к базе данных. Изменение данных было сделано, но любой инструмент, который вы используете, должен быть указан через этот клик, чтобы перейти и прочитать новую версию.

+0

При обновлении таблицы я имею в виду только то же действие, что и щелчок обновления в базе данных. Мне нужно получить данные из таблицы из моего приложения C#. Но когда я влияю на таблицу, вставляя, обновляя, удаляя что-то в моем запросе выбора, у меня есть старые результаты из таблицы. Я добавлю код к моему вопросу сейчас. – Dima

+0

Возможно, вы не совершили свои изменения. Но более глубокая проблема заключается в том, что вы не понимаете, что, когда вы выполнили вставку, обновление или удаление в таблице базы данных, произошло изменение данных. Вам не нужно ничего делать, кроме как совершить фиксацию (если это не сделано автоматически), чтобы другие сеансы могли видеть это изменение. –

Смежные вопросы