execute

EGL execute 语句允许您编写一个或多个 SQL 语句;特别是,允许您编写 SQL 数据定义语句(例如,CREATE TABLE 类型的数据定义语句)和数据处理语句(例如 INSERT 或 UPDATE 类型的数据处理语句)


execute 语句的语法图
#sql{ sqlStatement }
显式 SQL 语句。如果要让 SQL 语句更新或删除结果集中的行,则编写包含以下子句的 SQL UPDATE 或 DELETE 语句:
  WHERE CURRENT OF resultSetID
resultSetID
提供结果集的 EGL open 语句中指定的 resultSetID。

不要在 #sql 与左花括号之间留下任何空格。

for SQL record name
SQL 记录的名称。

如果指定语句类型(delete、insert 或 update),则 EGL 使用 SQL 记录来构建隐式 SQL 语句,如后所述。在任何情况下,都可以使用 SQL 记录来测试操作结果。

preparedStatementID
引用具有指定的标识的 EGL prepare 语句。如果未引用 prepare 语句,则必须指定显式 SQL 语句或者 SQL 记录与语句类型(delete、insert 或 update)的组合。
deleteinsertupdate
指示 EGL 将要提供具有指定类型的隐式 SQL 语句。如果指定语句类型而不是 SQL 记录名,则会发生声明时错误。

如果未设置语句类型,则必须指定显式 SQL 语句或对 prepare 语句的引用。

有关隐式 SQL 语句的概述,请参阅 SQL 支持

下面是几个示例语句(假定 employeeRecord 是一个 SQL 记录):
  execute
    #sql{ 
      create table employee (
			 	   empnum decimal(6,0) not null,
 				   empname char(40) not null,
				   empphone char(10) not null)
    };

  execute update for employeeRecord;

  execute
    #sql{
      call aStoredProcedure( :argumentItem)
    };
可以使用 execute 语句来发出下列类型的 SQL 语句:
不能使用 execute 语句来发出下列类型的 SQL 语句:

隐式 SQL DELETE

请求隐式 SQL DELETE 语句的作用是 SQL 记录属性(defaultSelectCondition)将确定删除哪些表行(只要每个 SQL 表键列中的值等于 SQL 记录的相应键项中的值)。如果既没有指定记录键也没有指定缺省选择条件,则删除所有表行。

对特定记录执行的隐式 SQL DELETE 语句类似于以下语句:
  DELETE FROM tableName
  WHERE  keyColumn01 = :keyItem01

不能使用单个 EGL 语句来从多个数据库表中删除行。

隐式 SQL INSERT

缺省情况下,请求隐式 SQL INSERT 语句的作用如下所示:
  • 记录中的键值确定表中的数据的逻辑位置。没有键的记录是根据 SQL 表定义和数据库的规则来处理的。
  • 作为记录部件中的记录项与 SQL 表列相关联的结果,生成的代码将每个记录项中的数据放到相关 SQL 表列中。
  • 如果已将记录项声明为是只读的,则生成的 SQL INSERT 语句不包含该记录项,并且数据库管理系统会将相关 SQL 表列的值设置为定义列时所指定的缺省值。
隐式 SQL INSERT 语句的格式类似于:
  INSERT INTO tableName
    (column01, ... columnNN)
    values (:recordItem01, ... :recordItemNN)
一些错误状态如下所示:
  • 指定了不是 INSERT 类型的 SQL 语句
  • 指定了 SQL INSERT 语句的一些子句但不是所有子句
  • 指定了具有下列任何特征的 SQL INSERT 语句(或接受隐式 SQL 语句):
    • 与多个 SQL 表相关
    • 只包含已被声明为只读主变量的主变量
    • 与不存在或者与相关主变量不兼容的列相关联

隐式 SQL UPDATE

缺省情况下,请求隐式 SQL UPDATE 语句的作用如下所示:
  • 只要每个 SQL 表键列中的值等于 SQL 记录的相应键项中的值,SQL 记录属性 defaultSelectCondition 就确定所选择的表行。如果既没有指定记录键也没有指定缺省选择条件,则更新所有表行。
  • 作为 SQL 记录声明中的记录项与 SQL 表列相关联的结果,给定的 SQL 表列将接收相关记录项的内容。然而,如果某 SQL 表列与只读的记录项相关联,则不会更新该列。
对特定记录执行的隐式 SQL UPDATE 语句的格式类似于以下语句:
  UPDATE tableName
  SET    column01 = :recordItem01,
         column02 = :recordItem01, ...
         columnNN = :recordItemNN
  WHERE  keyColumn01 = :keyItem01
在下列任何情况下,将发生错误:
  • 所有项都被标识为只读项
  • 语句尝试更新多个 SQL 表
  • 值正被写至数据库的项与在运行时不存在或与该项不兼容的列相关联

相关任务
语法图

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.