IRIS
是一个与面向对象编程语言相结合的多模型数据平台。因此,可以编写灵活的代码来执行以下所有操作:
SQL
执行批量插入数据。SQL
即可更改一个或多个表中的数据。SQL
。SQL
从记录中检索与给定条件匹配的值,而不是迭代大量对象。SQL
的情况下从一个或多个表中删除记录。也就是说,可以随时选择适合需要的访问模式。
在内部,所有访问都是通过直接Global
访问完成的,也可以在适当的时候以这种方式访问的数据。 (如果有类定义,则不建议使用直接Global
访问来更改数据。)
还可以直接在 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(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
,IRIS
包含了许多 SQL
对象扩展。
这些扩展中最有趣的功能之一是能够使用隐式连接运算符 (–>
)(有时称为“箭头语法”)跟踪对象引用。例如,假设有一个 Vendor
类,它引用另外两个类:Contact
和 Region
。可以使用隐式连接运算符引用相关类的属性:
SELECT ID,Name,ContactInfo->Name
FROM Vendor
WHERE Vendor->Region->Name = 'Antarctica'
当然,也可以使用 SQL JOIN
语法表达相同的查询。隐式连接运算符语法的优点是简洁,一目了然。