EXECUTE IMMEDIATE 文を使うと、文字列 (引用符で囲む) と変数を使ってプロシージャ内に文を組み立てることができます。次に示すのは、テーブルを作成する EXECUTE IMMEDIATE 文を含むプロシージャの例です。
CREATE PROCEDURE CreateTableProcedure( IN tablename char(128) ) BEGIN EXECUTE IMMEDIATE 'CREATE TABLE ' || tablename || '(column1 INT PRIMARY KEY)' END; |
EXECUTE IMMEDIATE 文は、結果セットを返すクエリで使用できます。次に例を示します。
CREATE PROCEDURE DynamicResult( IN Columns LONG VARCHAR, IN TableName CHAR(128), IN Restriction LONG VARCHAR DEFAULT NULL ) BEGIN DECLARE Command LONG VARCHAR; SET Command = 'SELECT ' || Columns || ' FROM ' || TableName; IF ISNULL( Restriction,'') <> '' THEN SET Command = Command || ' WHERE ' || Restriction; END IF; EXECUTE IMMEDIATE WITH RESULT SET ON Command; END; |
このプロシージャを呼び出すには、次の文を入力してください。
CALL DynamicResult( 'table_id,table_name', 'SYSTAB', 'table_id <= 10'); |
table_id | table_name |
---|---|
1 | ISYSTAB |
2 | ISYSTABCOL |
3 | ISYSIDX |
... | ... |
アトミックな複合文中では、COMMIT を行う EXECUTE IMMEDIATE 文は使えません。COMMIT 文はこのコンテキストでは許可されていません。
EXECUTE IMMEDIATE 文 [SP]を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |