Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 存储过程和触发器 » 使用过程、触发器和批处理

 

在过程中使用 EXECUTE IMMEDIATE 语句

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]