第三十七章 持久对象和SQL

文章目录

  • 第三十七章 持久对象和SQL
  • 简介
  • SQL
    • 从 `ObjectScript` 使用 `SQL`
    • 从 `Python` 使用 `SQL`
    • SQL 的对象扩展

第三十七章 持久对象和SQL

简介

IRIS 是一个与面向对象编程语言相结合的多模型数据平台。因此,可以编写灵活的代码来执行以下所有操作:

  • 通过 SQL 执行批量插入数据。
  • 打开一个对象,对其进行修改并保存,从而无需使用 SQL 即可更改一个或多个表中的数据。
  • 创建并保存新对象,将行添加到一个或多个表中,而无需使用 SQL
  • 使用 SQL 从记录中检索与给定条件匹配的值,而不是迭代大量对象。
  • 删除对象,即在不使用 SQL 的情况下从一个或多个表中删除记录。

也就是说,可以随时选择适合需要的访问模式。

在内部,所有访问都是通过直接Global访问完成的,也可以在适当的时候以这种方式访问的数据。 (如果有类定义,则不建议使用直接Global访问来更改数据。

SQL

还可以直接在 SQL Shell(在终端中)和管理门户中执行 SQL。其中每个都包含一个用于查看查询计划的选项,它可以帮助确定提高查询效率的方法。

SQL 支持完整的入门级 SQL-92 标准,但有一些例外和一些特殊扩展。 SQL 还支持索引、触发器、BLOB 和存储过程(这些是典型的 RDBMS 功能,但不是 SQL-92 标准的一部分)。

ObjectScript 使用 SQL

可以使用以下一种或两种方式从 ObjectScript 执行 SQL

动态 SQL%SQL.Statement%SQL.StatementResult 类),如下例所示:

 SET myquery = "SELECT TOP 5 Name, DOB FROM Sample.Person"
 SET tStatement = ##class(%SQL.Statement).%New()
 SET tStatus = tStatement.%Prepare(myquery)
 SET rset = tStatement.%Execute()
 DO rset.%Display()
 WRITE !,"End of data"

可以在 ObjectScript 方法和例程中使用动态 SQL

  • 嵌入式SQL,如下例所示:
 &sql(SELECT COUNT(*) INTO :myvar FROM Sample.Person)
    IF SQLCODE<0 {WRITE "SQLCODE error ",SQLCODE," ",%msg  QUIT}
    ELSEIF SQLCODE=100 {WRITE "Query returns no results"  QUIT}
 WRITE myvar

可以在 ObjectScript 方法和例程中使用嵌入式 SQL

Python 使用 SQL

可以使用以下一种或两种方式从 Python 执行 SQL

  • 可以直接执行SQL查询,如下例所示:
import iris
rset = iris.sql.exec("SELECT TOP 5 Name, DOB FROM Sample.Person") 
for row in rset:
    print(row)

也可以先准备 SQL 查询,然后执行它,如下例所示:

import iris
statement = iris.sql.prepare("SELECT TOP 5 Name, DOB FROM Sample.Person")
rset = statement.execute()
for row in rset:
    print(row)

可以使用这两种方法之一在 Python 终端或 Python 方法中执行 SQL 查询。

SQL 的对象扩展

为了更轻松地在对象应用程序中使用 SQLIRIS 包含了许多 SQL 对象扩展。

这些扩展中最有趣的功能之一是能够使用隐式连接运算符 (–>)(有时称为“箭头语法”)跟踪对象引用。例如,假设有一个 Vendor 类,它引用另外两个类:ContactRegion。可以使用隐式连接运算符引用相关类的属性:

SELECT ID,Name,ContactInfo->Name
FROM Vendor
WHERE Vendor->Region->Name = 'Antarctica'

当然,也可以使用 SQL JOIN 语法表达相同的查询。隐式连接运算符语法的优点是简洁,一目了然。

你可能感兴趣的:(M,使用方案,sql,数据库,java,python,开发语言,IRIS,Caché)