Expression列には、1つ以上のデータベース表で定義済の式を格納できます。これらの式には、表の別名とよばれる特殊な要素属性が使用されます。要素属性はEXF$TABLE_ALIAS
型を使用して作成され、属性名はEXF$TABLE_ALIAS
型を介して指定された表の別名として扱われます。
たとえば、一時変数HRMGR
と2つのデータベース表SCOTT.EMP
およびSCOTT.DEPT
に式セットが定義されているとします。
hrmgr='Greg' and emp.job='SALESMAN' and emp.deptno = dept.deptno and dept.loc = 'CHICAGO'
この種の式の属性セットは、次の例に示すように作成されます。
BEGIN -- Create the empty Attribute Set -- DBMS_EXPFIL.CREATE_ATTRIBUTE_SET('hrdb'); -- Add elementary attributes to the Attribute Set -- DBMS_EXPFIL.ADD_ELEMENTARY_ATTRIBUTE('hrdb','hrmgr','VARCHAR2(20)'); -- Define elementary attributes of EXF$TABLE_ALIAS type -- DBMS_EXPFIL.ADD_ELEMENTARY_ATTRIBUTE('hrdb','emp', EXF$TABLE_ALIAS('scott.emp')); DBMS_EXPFIL.ADD_ELEMENTARY_ATTRIBUTE('hrdb','dept', EXF$TABLE_ALIAS('scott.dept')); END; /
表HRInterest
には、このアプリケーション用に定義された式が格納されます。この表のExpression列は、次の例に示すように構成されます。
CREATE TABLE HRInterest (SubId number, Interest VARCHAR2(100)); BEGIN DBMS_EXPFIL.ASSIGN_ATTRIBUTE_SET('hrdb','HRInterest','Interest'); END; / -- insert the rows with expressions into the HRInterest table --
1つ以上の表の別名属性を使用する式では、表の別名属性を使用しない場合と同様に索引付けが可能です。たとえば、次のCREATE INDEX
文では、Expression列に定義されている索引のストアド属性と索引付き属性が構成されます。
CREATE INDEX HRIndex ON HRInterest (Interest) INDEXTYPE IS EXFSYS.EXPFILTER PARAMETERS ('STOREATTRS (emp.job, dept.loc, hrmgr) INDEXATTRS (emp.job, hrmgr)');
この式が評価されるときには、対応する表からのROWIDが割り当てられ、表の別名として定義されている属性の値が渡されます。HRInterest
表に格納されている式は、次の問合せを使用して、EMP
表とDEPT
表に格納されているデータ(行)(およびHRMGR
の値)について評価できます。
SELECT empno, job, sal, loc, SubId, Interest FROM emp, dept, HRInterest WHERE emp.deptno = dept.deptno AND EVALUATE(Interest, hrdb.getVarchar('Greg',emp.rowid,dept.rowid)) = 1;
式がEMP
表とDEPT
表の行のサブセットについてのみ評価される場合は、前述の問合せにさらに述語を追加できます。
SELECT empno, job, sal, loc, SubId, Interest FROM emp, dept, HRInterest WHERE emp.deptno = dept.deptno AND emp.sal > 1400 AND EVALUATE(Interest, hrdb.getVarchar('Greg',emp.rowid,dept.rowid)) = 1;