В небольшой базе данных предварительной регистрации я использую следующий SQL для создания VIEW всякий раз, когда указывается конкретное имя пользователя. Я использую это в основном для получения моментального снимка всякий раз, когда системный администратор подозревает, что повторяющиеся имена регистрируются. Это будет сделано редко (максимум один раз в час), поэтому схема базы данных не должна становиться чрезмерно большой.Как эффективно создавать TRIGGER, который иногда генерирует VIEW?
CREATE OR REPLACE TRIGGER upd_on_su_entry
AFTER UPDATE OR INSERT
ON PRE_REG_MEMBER
FOR EACH ROW
BEGIN
IF :new.MEMBER_NAME = 'SysAdmin Dup Tester' THEN
EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW mem_n AS SELECT :old.MEMBER_NAME, COUNT(:old.MEMBER_NAME) FROM MEMBER GROUP BY MEMBER_NAME';
END IF;
END;
Однако, это, кажется раздутым, неэффективным и ошибочный способ работы (в соответствии с моим администратором). Есть ли здесь фундаментальная ошибка? Можно ли сделать эквивалентный снимок другим способом?
Я очень новичок в SQL, поэтому, пожалуйста, несите меня.
Кроме того, я хочу быть с помощью представления, как:
public void dups()throws Exception
{
Calendar cal = Calendar.getInstance();
jt.setText("Duplicate List at : "+ cal.getTime());
try{
rs=stat.executeQuery("select * from upd_on_su_entry");
while(rs.next())
{
jt.append(rs.getString("MEMBER_NAME")+"\t");
jt.append(rs.getString(2)+"\t");
}
}
catch(Exception e){System.out.print("\n"+e);}
}
Что именно должен делать этот триггер? Похоже, он просто переопределяет представление, чтобы в нем содержалась одна строка, содержащая имя пользователя. Я что-то упускаю? – therealmitchconnors
@therealmitchconnors Aargh, кажется, я не читал строку запроса. Предполагалось, что там будет sys_refcursor, чтобы получить несколько строк. В представлении будет просто проверено, какие пользователи имеют несколько регистраций. Извините, мне пришлось обновить код. – RaunakS