日本語PDF

13.64 SQL_MACRO句

SQL_MACRO句は、表式で使用できるSQLマクロとしてファンクションにマークを付けます。

ビューで参照されるSQLマクロは、常にビューの所有者の権限で実行されます。

AUTHIDプロパティは指定できません。SQLマクロは呼び出されると、実行者の正しいファンクションのように動作します。SQLマクロ所有者は、起動元のファンクションに継承権限を付与する必要があります。

マクロ注釈付きファンクションをPL/SQLで使用する場合は、通常のファンクション戻り文字またはCLOB型のようにマクロ拡張なしで動作します。

SQL_MACROの注釈は、次のSQL文で使用できます。

SQLマクロの使用上の制限:
  • SQLマクロは、問合せ表式のFROM句でのみ使用できます。
  • SQLマクロは、仮想列式、ファンクション索引、エディショニング・ビューまたはマテリアライズド・ビューでは使用できません。
  • タイプ・メソッドには、SQL_MACROで注釈を付けることはできません。

構文

sql_macro_clause ::=

セマンティクス

sql_macro_clause

sql_macro_clauseは、ファンクション内で1回のみ使用できます。SQLマクロ・ファンクションを作成するには、ファンクション定義にsql_macro_clauseを含めます。SQLマクロ・ファンクションを定義前に宣言する場合は、ファンクションの宣言でsql_macro_clauseを指定する必要があります。

sql_macro_clauseの制限

SQL_MACROの注釈は、RESULT_CACHEPARALLEL_ENABLEおよびPIPELINEDには使用できません。DETERMINISTICプロパティは指定できませんが、SQLマクロは常に暗黙で決定的になります。

SQLマクロ・ファンクションには、VARCHAR2CHARまたはCLOBの戻り型が必要です。

例13-22 Budget: 表式でのSQLマクロの使用

この例は、表式で使用するbudgetというSQLマクロを示しています。このマクロは、特定の役職の従業員に対する部署ごとの合計給与を返します。

CREATE FUNCTION budget(job VARCHAR2) RETURN VARCHAR2 SQL_MACRO IS
BEGIN
   RETURN q'{SELECT deptno, SUM(sal) budget 
             FROM scott.emp
             WHERE job = budget.job
             GROUP BY deptno}';
END;
/

この問合せは、表式で使用されるSQLマクロbudgetを表示します。

SELECT * FROM budget('MANAGER');

結果:

    
DEPTNO     BUDGET 
---------- ----------   
        20       2975  
        30       2850 
        10       2450  

例13-23 Take: 多相ビューでの表マクロの使用

この例では、表マクロを作成します。このマクロは、表tから最初のn行を返します。

CREATE FUNCTION take (n NUMBER, t DBMS_TF.TABLE_T) 
                      RETURN VARCHAR2 SQL_MACRO IS
BEGIN
   RETURN 'SELECT * FROM t FETCH FIRST take.n ROWS ONLY';
END;
/
この問合せでは、表部門の最初の2行が戻されます。
SELECT * FROM take(2, dept);
結果:
    DEPTNO DNAME          LOC   
---------- -------------- -------------   
        10 ACCOUNTING     NEW YORK       
        20 RESEARCH       DALLAS   
SQLマクロは、バインド変数およびより複雑なSQL構文とともに使用できます。
VAR row_count NUMBER;
EXEC :row_count := 5

WITH t AS (SELECT * FROM emp NATURAL JOIN dept ORDER BY ename)
SELECT ename, dname FROM take(:row_count, t);
結果:
ENAME      DNAME  
---------- --------------    
ADAMS      RESEARCH     
ALLEN      SALES     
BLAKE      SALES   
CLARK      ACCOUNTING   
FORD       RESEARCH    

関連トピック