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。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |