WHERE句でのOracle Database PL/SQLファンクションの参照

Oracle Databaseのユーザー定義PL/SQLファンクションは、CREATE CACHE GROUP文、LOAD CACHE GROUP文またはREFRESH CACHE GROUP文のWHERE句で(動的キャッシュ・グループの場合のみ)、間接的に起動できます。

ファンクションを作成した後、そのファンクションのパブリック・シノニムを作成します。次に、ファンクションのEXECUTE権限をPUBLICに付与します。

たとえば、Oracle Databaseでは、次のとおりです。

CREATE OR REPLACE FUNCTION get_customer_name
(c_num sales.customer.cust_num%TYPE) RETURN VARCHAR2 IS
c_name sales.customer.name%TYPE;
BEGIN
  SELECT name INTO c_name FROM sales.customer WHERE cust_num = c_num;
  RETURN c_name;
END get_customer_name;

CREATE PUBLIC SYNONYM retname FOR get_customer_name;
GRANT EXECUTE ON get_customer_name TO PUBLIC;

次に、TimesTenデータベースでは、たとえば、このファンクション用に作成されたOracle Databaseパブリック・シノニムを参照するWHERE句を指定して、キャッシュ・グループを作成できます。

CREATE READONLY CACHE GROUP top_customer
FROM sales.customer
 (cust_num NUMBER(6) NOT NULL,
  region   VARCHAR2(10),
  name     VARCHAR2(50),
  address  VARCHAR2(100),
  PRIMARY KEY(cust_num))
WHERE sales.customer.name = retname(100);

LOAD CACHE GROUP文またはREFRESH CACHE GROUP文にWHERE句を使用できるキャッシュ・グループ・タイプの場合は、ファンクション用に作成されたパブリック・シノニムを参照することによって、そのファンクションを間接的に起動できます。たとえば、次のLOAD CACHE GROUP文を使用して、AWTキャッシュ・グループnew_customersをロードできます。

LOAD CACHE GROUP new_customers WHERE name = retname(101) COMMIT EVERY 0 ROWS;