Collection Contents 上一页 下一页 PDF

ASA SQL 用户指南

使用过程、触发器和批处理

在过程中使用 EXECUTE IMMEDIATE 语句


EXECUTE IMMEDIATE 语句使用文字字符串(在引号中)和变量的组合,允许在过程内构建语句。

例如,以下过程包含创建表的 EXECUTE IMMEDIATE 语句。

CREATE PROCEDURE CreateTableProc(
      IN tablename char(30) )
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',
   'SYSTABLE',
   'table_id <= 10')
table_id table_name
1 SYSTABLE
2 SYSCOLUMN
3 SYSINDEX
... ...

在原子复合语句中,不能使用导致 COMMIT(提交)的 EXECUTE IMMEDIATE 语句,因为在该上下文中不允许 COMMIT。

有关 EXECUTE IMMEDIATE 语句的详细信息,请参见 EXECUTE IMMEDIATE 语句 [SP]


Collection Contents 上一页 下一页 PDF