小さな事前登録データベースでは、特定のユーザー名が指定されるたびにVIEWを生成するために、次のSQLを使用しています。私は主に、sysadminが重複する名前が登録されていると思われるたびにスナップショットを取得するためにこれを使用しています。これはまれにしか実行されません(1時間に1回atmost)ので、データベースのスキーマが過度に大きくなるべきではありません。場合によっては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);}
}
このトリガーは正確に何をすべきですか?ビューには、ユーザー名を含む1つの行を含むビューが再定義されているようです。何か不足していますか? – therealmitchconnors
@therealmitchconnorsああ、私はクエリ文字列をミスコピーしたようだ。そこに複数の行を取得するsys_refcursorがあるはずです。ビューは、どのユーザが複数の登録をしているかを確認するだけです。申し訳ありませんが、コードを更新する必要があります。 – RaunakS