PASSTHRU 函数对表达式求值,并将结果字符串作为数据库语句执行,返回一个结果集。
PASSTHRU 函数类似于 PASSTHRU 语句,PASSTHRU 语句 中有关于 PASSTHRU 语句的描述。
SYNTAXPASSTHRU 函数主要用于向数据库发出目前代理还不支持的复合 SELECT 语句。(代理目前不支持的复合 SELECT 语句示例包括那些包含 BROUP BY 或 HAVING 子句的 SELECT 语句)。
对第一个表达式求值,得出的字符串传递给 DatabaseReference 指向的数据库(在 TO 子句)以执行。如果未指定 TO 子句,则使用节点的 data source 属性指向的数据库。
在数据库字符串中使用问号(?)表示参数。参数值由 VALUES 子句提供。
如果指定了 VALUES 子句,则对其表达式求值,并作为参数传递给数据库;(即,它们的值替代数据库语句中的问号)。
如果只有一个 VALUE 表达式,则结果不一定是列表。如果它是列表,则列表的标量值将替换问号。如果它不是列表,则单个标量值会替换数据库语句中的(单个)问题。如果有多个 VALUE 表达式,则应该没有表达式对列表求值。从而它们的标量值将替换问号。
由于数据库语句是由用户程序构造的,因此不绝对需要使用参数标记(即,问号)或 VALUES 子句,因为该程序可以将整个数据库语句作为文字字符串提供。 不过,请尽可能使用参数标记,因为这会减少需要准备并存储在数据库和代理中的不同语句的数量。
数据库引用是用于引用消息树的字段引用的特殊情况。它由单词“Database”及后面的数据源名称(即,数据库实例的名称)构成。
您可以直接指定数据源名称,或通过括在花括号({...})中的表达式进行指定。直接指定的数据源名称遵守名称替代。即,所用名称如果已声明为已知名称,则会使用已声明名称的值而不是名称本身(请参阅DECLARE 语句)。
PASSTHRU 操作过程中有可能会发生错误。例如,数据库可能不可操作,或者语句可能无效。在这些情况下,除非节点将其数据库发生错误时抛出异常属性设置为 FALSE,否则将抛出异常。这些异常设置相应的 SQL 代码、状态、本机错误和错误文本值,并且可以由错误处理程序来处理(请参阅 DECLARE HANDLER 语句)。
有关处理数据库错误的更多信息,请参阅捕获数据库状态。
SET OutputRoot.XML.Data.SelectResult.Row[] = PASSTHRU('SELECT R.* FROM Schema1.Table1 AS R WHERE R.Name = ? OR R.Name = ? ORDER BY Name' TO Database.DSN1 VALUES ('Name1', 'Name4'));