2016-08-16 5 views
1

変更通知リスナーを表に登録しようとしています。私はテーブルのリスナーを作成するために見てきた中で唯一の方法は、特定の変数にデータを選択することです:空の表のoracleへの変更通知の登録

SELECT employee_id 
    INTO v_employee_id 
    FROM hr.employees  
    WHERE ROWNUM < 2; 

ここの表は、少なくとも 1行を持っている必要があります。

フル宣言:Oracleのドキュメントから

DECLARE 
    v_cn_recip  SYS.CHNF$_REG_INFO; 
    v_regid   NUMBER; 
    v_employee_id hr.employees.manager_id%TYPE; 
BEGIN 
    v_cn_recip := SYS.CHNF$_REG_INFO('hr.dcn_callback­', DBMS_CHANGE_NOTIFICATION.QOS_ROWIDS, 0, 0, 0); 
    v_regid := DBMS_CHANGE_NOTIFICATION.NEW_REG_START(v_cn_recip); 
    SELECT employee_id 
    INTO v_employee_id 
    FROM hr.employees  
    WHERE ROWNUM < 2;   
    DBMS_CHANGE_NOTIFICATION.REG_END; 
    DBMS_OUTPUT.PUT_LINE('the registration id for this query is '||v_regid); 
END; 
/

次のようhttps://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_dcn.htm

私の質問は:空のテーブルに変更通知リスナを登録する方法はありますか?そうでない場合、これは特定の理由により設計によって行われましたか?

答えて

2

だけで推測していますが、提供されたリンクから、ドキュメントによると、それは言う:

DBMS_CHANGE_NOTIFICATIONパッケージには、オブジェクト自体を登録し、 のかどうかにかかわらず、テーブルへの変更を意味しています 変更は、登録されたそのだけで、テーブル全体を登録する場合でも、クエリを必要とするだろう、多分あなたからのカウントをやって試すことができます不思議です 通知

をクエリは、生成によって返された行にありますテーブル、whi chは1と1行しか返さないことが保証されています:

DECLARE 
... 
v_num number; 
... 
BEGIN 
... 
SELECT count(1) 
    INTO v_num 
    FROM hr.employees  
    WHERE ROWNUM < 2; 
... 
END; 
+0

これは完全に動作します。リスナーを登録するためには、テーブルのクエリが必要になるというのはとても独特なことです。これに答える時間をとってくれてありがとう、本当にありがとう!もし私ができるなら、私は公に投票するだろう。 – skylerto

関連する問題