0
create table CIT_ADMIN.OBJECT_DETAIL_MASTER (
  RULE_ID   VARCHAR(10), 
  ATTR_1   VARCHAR(50), 
  ATTR_2   VARCHAR(50), 
  ATTR_3   VARCHAR(50), 
  CREATED_DATE    DATE DEFAULT SYSDATE)

create table CIT_ADMIN.PRIORITY_RULE_FACTORY (
  RULE_ID   VARCHAR(10), 
  RULE_DESC VARCHAR(10), 
  RULE_1   VARCHAR(50), 
  RULE_2   VARCHAR(50), 
  RULE_3   VARCHAR(50), 
  CREATED_DATE    DATE DEFAULT SYSDATE)

insert into CIT_ADMIN.PRIORITY_RULE_FACTORY
       (RULE_ID, RULE_DESC,  RULE_1,         RULE_2,          RULE_3)
values ('1',     'POSITION', 'ODS_KEY',      'NOTIONAL',      'SIK')

insert into CIT_ADMIN.PRIORITY_RULE_FACTORY
       (RULE_ID, RULE_DESC,  RULE_1,         RULE_2,          RULE_3)
values ('2',     'CLIENT',   'UCN',          'AGREEMENT_ID',  'FACILITY_ID')

insert into CIT_ADMIN.PRIORITY_RULE_FACTORY
       (RULE_ID, RULE_DESC,  RULE_1,         RULE_2,          RULE_3)
values ('3',     'NETTING',  'AGREEMENT_ID', 'AGREEMENT_AMT', 'MATURITY')

insert into CIT_ADMIN.OBJECT_DETAIL_MASTER
       (RULE_ID, ATTR_1, ATTR_2, ATTR_3)
values ('1',     '123',  '1000', '600')

insert into CIT_ADMIN.OBJECT_DETAIL_MASTER
       (RULE_ID, ATTR_1, ATTR_2, ATTR_3)
values ('2',     '456',  '2000', '500')

insert into CIT_ADMIN.OBJECT_DETAIL_MASTER
       (RULE_ID, ATTR_1, ATTR_2, ATTR_3)
values ('3',     '789',  '3000', '400')

これらは私のテーブルです。ルール ID は、マスター テーブルの外部キーであり、ルール ファクトリ テーブルの主キーでもあります。ルールとデータをリンクできるクエリを書いてみました。

**Like:**
WITH ATTR AS (SELECT * FROM CIT_ADMIN.PRIORITY_RULE_FACTORY WHERE RULE_DESC = 'POSITION')

SELECT ATTR_2 FROM CIT_ADMIN.OBJECT_DETAIL_MASTER a
WHERE RULE_ID in (SELECT ATTR.RULE_ID FROM attr) 
AND ATTR_1 = '123'

position と ods_key がわかっている場合は、Notional が必要です。このクエリはそれを取得しましたが、問題はそれらの属性の位置がわからないことです。先に進むための指針を教えてください.!!!

よろしく。

4

2 に答える 2

1

「ルール」と「属性」を正規化すると、作業が簡単になる場合があります。単一の属性名 (「ODS_KEY」、「NOTIONAL」など) とそれに付随する値 (たとえば、 123、1000 など)、これをルールに関連付けます (例: 'POSITION'、'CLIENT'、'NETTING' など)。

共有してお楽しみください。

于 2013-07-23T14:08:37.623 に答える
1

これはかなりレアなデザインだと思います。つまり、悪名高いEAVパターンが賢明な代替案のように見える場合、モデルに何か問題があるに違いありません.

とにかく、目の前のタスクを解決する関数があります。関数を提案するのは、単純にルール エンジンがトリッキーな獣であり、カプセル化が機能の修正に役立つからです。

create or replace function eval_rule
    ( p_rule_id in priority_rule_factory.rule_id%type
      , p_rule in priority_rule_factory.rule_1%type )
     return object_detail_master.attr_1%type
is
    return_value object_detail_master.attr_1%type;
begin

     select case 
            when prf.rule_1 = p_rule then odm.attr_1
            when prf.rule_2 = p_rule then odm.attr_2
            when prf.rule_3 = p_rule then odm.attr_3
            end
    into return_value
    from priority_rule_factory prf
         join object_detail_master odm
            on prf.rule_id = odm.rule_id
    where prf.rule_id = p_rule_id;        

    return return_value;
end eval_rule;
/
于 2013-08-01T17:41:42.220 に答える