第十三章 使用动态SQL(七)
SQL元数据
动态SQL提供以下类型的元数据:
- 在“准备”之后,描述查询类型的元数据。
- 在“准备”之后,描述查询中选择项的元数据(“列”和“扩展列信息”)。
- 在准备之后,描述查询参数的元数据:参数,
:var参数和常量。 (语句参数,形式参数和对象) - 执行之后,描述查询结果集的元数据。在执行Prepare操作(
%Prepare(),%PrepareClassQuery()或%ExecDirect())之后,可以使用属性值。 - 可以直接为最新的返回元数据属性。
- 可以返回包含
%SQL.StatementMetadata属性的oref的属性。这使可以返回多个准备操作的元数据。
或语句返回所有这些元数据。 INSERT,或返回语句类型元数据和形式参数。
语句类型元数据
使用类进行之后,可以使用%SQL.StatementMetadata statementType属性来确定准备哪种类型的SQL语句,如以下示例所示。本示例使用属性来保存和比较两操作的元数据:
/// d ##class(PHA.TEST.SQL).MetaData()
ClassMethod MetaData()
{
SET tStatement = ##class(%SQL.Statement).%New()
SET myquery1 = "SELECT TOP ? Name,Age,AVG(Age),CURRENT_DATE FROM Sample.Person"
SET myquery2 = "CALL Sample.SP_Sample_By_Name(?)"
SET qStatus = tStatement.%Prepare(myquery1)
IF qStatus'=1 {
WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT
}
SET meta1 = tStatement.%Metadata
SET qStatus = tStatement.%Prepare(myquery2)
IF qStatus'=1 {
WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT
}
SET meta2 = tStatement.%Metadata
WRITE "语句类型query 1: ",meta1.statementType,!
WRITE "语句类型query 2: ",meta2.statementType,!
WRITE "End of metadata"
}





.png)
