命令批处理(FireDAC)

来自RAD Studio
跳转到:航行搜索

转到使用命令(FireDAC)

概述

命令批处理是一组SQL语句,一次从应用程序发送到DBMS以执行。DBMS将批处理的语句编译为单个执行计划。然后一次执行一条执行计划中的语句。这样可以最大限度地减少网络流量和服务器工作负载。执行后,DBMS返回到由命令生成的客户端结果集。


处理结果集

FireDAC允许您使用下一个记录集方法。要启用对所有结果集的处理,您应该设置获取选项。自动关闭False(错误)在执行命令之前。否则,在第一个光标到达Eof之后,它将被关闭,其他光标将被丢弃。

这是SQL Server的一个示例:

FD查询1.获取选项.自动关闭 := False(错误);
FD查询1.SQL语言.添加('从[Orders]中选择*');
FD查询1.SQL语言.添加('从[Order Details]中选择*');
FD查询1.正常开放; //此处可以访问[Orders]表行
FD查询1.下一个记录集; //[Order Details]此处可用的表行

应用程序可以使用TFDMem表格数据属性。例如:

FD查询1.获取选项.自动关闭 := False(错误);
FD查询1.SQL语言.文本 := '从订单中选择*;从客户的;

FD查询1.正常开放;
FD查询1.全部获取;
//将订单记录分配给FDMemTable1
FDMem表1.数据 := FD查询1.数据;

FD查询1.下一个记录集;
FD查询1.全部提取;
//将客户记录分配给FDMemTable2
FDMem表2.数据 := FD查询1.数据;

FireDAC自动跳过没有列和行的空结果集。


DMBS和批次

DBMS必须支持使用FireDAC执行的命令批。如果DBMS不支持批处理,则可以使用SQL脚本。以下是DBMS支持的批处理:

数据库管理系统 笔记
IBM DB2 这些命令必须用“;”分隔。
火鸟 使用EXECUTE BLOCK结构。
Informix公司 这些命令必须用“;”分隔。批处理只能包含单个DB访问命令。
Microsoft SQL Server 也可以用“;”分隔命令。
MySQL数据库 这些命令必须用“;”分隔。
甲骨文公司 使用BEGIN END匿名块构造。
PostgreSQL 这些命令必须用“;”分隔。

没有参数的批处理可以用资源选项。直接执行设置为真的.对于PostgreSQL v>=9.0,使用DO BEGIN END匿名块构造。

数据库 这些命令必须用“;”分隔。
SQL任意位置 命令可以用“;”分隔(可选)。
Teradata数据库 这些命令必须用“;”分隔。

此外,FireDAC完全支持返回多个结果集的命令。以下是一些示例:

  • 带有REF CURSOR的Oracle存储过程。
  • 带有嵌套游标的Oracle结果集。
  • PostgreSQL使用RETURNS SETOF和/或OUT REFCURSOR参数存储函数。
注:要执行多个INSERT/UPDATE/DELETE命令,请考虑使用阵列DML功能,这对大批量更有效。

另请参见

样品