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;