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