1 关注者 · 485 帖子

SQL 是在关系数据库中存储、操作和检索数据的标准语言。

文章 姚 鑫 · 十一月 8, 2021 9m read

第七十章 SQL命令 SELECT(二)

select-item

这是所有SELECT语句的必选元素。 通常,选择项指的是FROM子句中指定的表中的一个字段。 选择项由下列一个或多个项组成,多个项之间用逗号分隔:

  • 列名(字段名),带或不带表名别名:
SELECT Name,Age FROM Sample.Person

字段名不区分大小写。 但是,结果集中与字段关联的标签使用表定义中指定的SqlFieldName的字母大小写,而不是选择项中指定的字母大小写。

包含一个或多个下划线的字段名引用嵌入的串行对象属性。 例如,对于字段名Home_City,表包含一个引用字段Home,该字段引用定义属性City的嵌入式串行对象。 对于字段名Home_Phone_AreaCode,该表包含一个引用字段Home,该字段引用嵌入式串行对象属性Phone,该属性引用定义AreaCode属性的嵌套嵌入式串行对象。 如果选择一个引用字段,如HomeHome_Phone,则以%List数据类型格式接收串行对象中所有属性的值。

要显示RowID(记录ID),可以使用%ID伪字段变量别名,该别名显示RowID,而不管它被分配的名称是什么。 默认情况下,RowID的名称是ID,但如果存在用户定义的名为ID的字段, IRIS可能会重命名它。 默认情况下,RowID是一个隐藏字段。

0
0 166
文章 姚 鑫 · 十一月 7, 2021 10m read

第六十九章 SQL命令 SELECT(一)

从数据库中的一个或多个表中检索行。

大纲

[(] SELECT [%keyword]
    [DISTINCT [BY (item {,item2})] | ALL] 
    [TOP {int | ALL}]
    select-item {,select-item, ...}
    [INTO host-variable-list]
    [FROM [optimize-option] table-ref [[AS] t-alias]
      {,table-ref [[AS] t-alias]} ]
    [WHERE condition-expression [{AND | OR condition-expression] ]
    [GROUP BY scalar-expression]
    [HAVING condition-expression [{AND | OR condition-expression] ]
    [ORDER BY item-order-list [ASC | DESC] ]
[)]

select-item ::= 
  [t-alias.]*   |
  [t-alias.]scalar-expression [[AS] c-alias]

参数

0
0 334
文章 姚 鑫 · 十一月 6, 2021 4m read

第六十八章 SQL命令 SAVEPOINT

在事务中标记一个点。

大纲

SAVEPOINT pointname

参数

  • pointname - 保存点的名称,指定为标识符。

描述

SAVEPOINT语句标记事务中的一个点。建立保存点使能够执行事务回滚到保存点,撤消在此期间完成的所有工作并释放在此期间获得的所有锁。在长期运行的事务或具有内部控制结构的事务中,通常希望能够回滚事务的一部分,而不撤消在事务期间提交的所有工作。

保存点的建立会递增$TLEVEL事务级别计数器。回滚到保存点会将$TLEVEL事务级别计数器递减到紧接在保存点之前的值。可以在一个事务内建立最多255个保存点。超过这个保存点数量会导致SQLCODE-400致命错误,这是在SQL执行期间捕获的<TRANSACTION LEVEL> 异常。终端提示符将当前事务级别显示为提示符的TLn:前缀,其中n是介于1255之间的整数,表示当前$TLEVEL计数。

每个保存点都与一个保存点名称相关联,这是一个唯一的标识符。保存点名称不区分大小写。保存点名称可以是分隔的标识符。

  • 如果指定的保存点没有点名,或者指定的点名不是有效的标识符或SQL保留字,则会发出运行时SQLCODE-301错误。
  • 如果指定点名称以“SYS”开头的保存点,则会发出运行时SQLCODE-302错误。这些保存点名称是保留的。
0
0 145
文章 姚 鑫 · 十一月 5, 2021 4m read

第六十七章 SQL命令 ROLLBACK

回滚事务。

大纲

ROLLBACK [WORK]

ROLLBACK TO SAVEPOINT pointname

参数

  • pointname - 作为标识符指定的现有保存点的名称。

描述

ROLLBACK语句将回滚事务,撤消已执行但未提交的工作,减少$TLEVEL事务级别计数器,并释放锁。 ROLLBACK用于将数据库恢复到以前的一致状态。

  • ROLLBACK回滚当前事务期间完成的所有工作,将$TLEVEL事务级别计数器重置为0,并释放所有锁。 这会将数据库恢复到事务开始之前的状态。 ROLLBACKROLLBACK WORK是等价的语句; 这两个版本都支持兼容性。
  • ROLLBACK TO SAVEPOINT pointname将回滚自指定保存点以来已完成的所有工作,并按未完成的保存点的数量递减$TLEVEL事务级别计数器。 当所有保存点都被回滚或提交,并且事务级别计数器重置为零时,事务就完成了。 如果指定的保存点不存在,或者已经回滚,ROLLBACK将发出SQLCODE -375错误并回滚整个当前事务。

回滚到SAVEPOINT必须指定一个点名。 如果不这样做,将导致SQLCODE -301错误。

如果事务操作未能成功完成,则会发出SQLCODE -400错误。

不回滚

ROLLBACK操作不影响以下项目:

0
0 326
文章 姚 鑫 · 十一月 4, 2021 9m read

第六十六章 SQL命令 REVOKE

从用户或角色中删除特权。

大纲

REVOKE admin-privilege FROM grantee 

REVOKE role FROM grantee 

REVOKE [GRANT OPTION FOR] object-privilege
       ON object-list FROM grantee [CASCADE | RESTRICT] [AS grantor] 

REVOKE [GRANT OPTION FOR] SELECT ON CUBE[S] object-list  FROM grantee 

REVOKE column-privilege (column-list) 
      ON table FROM grantee  [CASCADE | RESTRICT]

参数

0
0 131
文章 姚 鑫 · 十一月 3, 2021 2m read

第六十五章 SQL命令 PURGE CACHED QUERIES

删除一个或多个缓存查询。

大纲

PURGE [CACHED] QUERIES

PURGE [CACHED] QUERIES BY AGE n

PURGE [CACHED] QUERIES BY TABLE table-name

PURGE [CACHED] QUERIES BY NAME class-name [, class-name]

参数

  • n - 自上次使用缓存查询以来的整数天数,指定为带引号的字符串。
  • table-name - 存在缓存查询的现有表的名称。 表名可以是限定的(schema.table),也可以是非限定的(table)。 非限定表名接受默认模式名。
  • class-name- 缓存的查询类名称或以逗号分隔的缓存查询类名称列表。 缓存的查询类名是区分大小写的。

描述

PURGE CACHED QUERIES命令删除指定范围内定义的缓存查询:

0
0 194
文章 姚 鑫 · 十一月 2, 2021 5m read

第六十四章 SQL命令 ORDER BY(二)

示例

下面的示例按照RowID的反向顺序对记录进行排序:

SELECT %ID,Name
FROM Sample.Person
ORDER BY %ID DESC

下面两个示例展示了在ORDER BY子句中指定排序列的不同方法。 下面两个查询是等价的; 第一种方法使用列名作为排序项,第二种方法使用列号(选择项列表中项目的序号):

SELECT Name,Age,Home_State
FROM Sample.Person
ORDER BY Home_State,Age DESC
SELECT Name,Age,Home_State
FROM Sample.Person
ORDER BY 3,2 DESC

下面的示例按包含IRIS列表数据的字段进行排序。 因为IRIS列表是一个以格式化字符开始的编码字符串,所以本例使用$LISTTOSTRING来按实际字段数据值排序,而不是按列表元素编码:

SELECT Name,FavoriteColors
FROM Sample.Person
WHERE FavoriteColors IS NOT NULL
ORDER BY $LISTTOSTRING(FavoriteColors)
0
0 111
文章 姚 鑫 · 十一月 1, 2021 8m read

第六十三章 SQL命令 ORDER BY(一)

指定结果集中行排序的SELECT子句。

大纲

ORDER BY ordering-item [ASC | DESC]{,ordering-item [ASC | DESC] ...}

参数

  • ordering-item - 决定排序顺序的文字。 列名、列别名或列号。 ORDER BY子句可以包含单个排序项或以逗号分隔的排序项列表,以指定排序层次结构。
  • ASC DESC - 可选-按升序(ASC)或降序(DESC)排序。 默认为升序。

描述

ORDER BY子句根据指定列的数据值或以逗号分隔的列序列对查询结果集中的记录进行排序。 该语句对单个结果集进行操作,这些结果集要么来自SELECT语句,要么来自多个SELECT语句的UNION

ORDER BY按逻辑(内部存储)数据值对记录进行排序,而不考虑当前的选择模式设置。

ORDER BY子句是SELECT语句中的最后一个子句。 它出现在FROMWHEREGROUP BYHAVING子句之后。 以错误的顺序指定SELECT子句将产生SQLCODE -25错误。

如果SELECT语句没有指定ORDER BY子句,则返回的记录顺序是不可预测的。

0
0 160
文章 姚 鑫 · 十月 31, 2021 2m read

第六十二章 SQL命令 OPEN

打开游标。

大纲

OPEN cursor-name

参数

  • cursor-name - 游标的名称,已经声明过了。 游标名称是在DECLARE语句中指定的。 游标名称区分大小写。

描述

OPEN语句根据游标的DECLARE语句中指定的参数打开游标。 一旦打开,就可以获取游标。 打开的游标必须关闭。

  • 试图打开未声明的游标会出现SQLCODE -52错误。
  • 试图打开已经打开的游标会导致SQLCODE -101错误。
  • 试图获取或关闭未打开的游标将导致SQLCODE -102错误。

成功的OPEN设置SQLCODE = 0,即使结果集是空的。

作为SQL语句,这只在嵌入式SQL中支持。 通过ODBC使用ODBC API支持等价的操作。

示例

下面的嵌入式SQL示例显示了一个正在打开和关闭的游标(名为EmpCursor):

0
0 178
文章 姚 鑫 · 十月 30, 2021 5m read

第六十一章 SQL命令 LOCK

锁表

大纲

LOCK [TABLE] tablename IN EXCLUSIVE MODE [WAIT seconds]

LOCK [TABLE] tablename IN SHARE MODE [WAIT seconds]

参数

  • tablename - 要锁定的表的名称。 Tablename必须是已经存在的表。 表名可以是限定的(schema.table),也可以是非限定的(table)。 非限定表名接受默认模式名。 模式搜索路径被忽略。
  • IN EXCLUSIVE MODE / IN SHARE MODE - IN EXCLUSIVE MODE关键字短语创建一个常规的IRIS锁。 IN SHARE MODE关键字短语创建一个共享的IRIS锁。
  • WAIT seconds - 可选-一个整数,指定在超时前尝试获取锁的秒数。 如果省略,则应用系统默认超时时间。

描述

LOCKLOCK TABLE是同义词。

LOCK命令显式锁定SQL表。 此表必须是已存在的表,对其具有必要的特权。 如果tablename是一个不存在的表,LOCK会失败并出现编译错误。 如果tablename是临时表,则命令执行成功,但不执行任何操作。 如果tablename是视图,则命令失败,并出现SQLCODE -400错误。

0
0 198
文章 姚 鑫 · 十月 29, 2021 5m read

第六十章 SQL命令 JOIN(二)

单向外部联接

IRIS支持单向外部联接:左外部联接和右外部联接。

使用标准的“inner”联接时,当一个表的行链接到第二个表的行时,第一个表中找不到第二个表中对应行的行将从输出表中排除。

使用单向外联接时,即使第二个表中没有匹配项,第一个表中的所有行也会包括在输出表中。使用单向外连接,第一个表会从第二个表中取出相关信息,但不会因为第二个表中缺少匹配项而牺牲自己的行。

例如,如果查询首先列出Table1并创建一个左外部联接,那么它应该能够看到Table1中的所有行,即使它们在Table2中没有对应的记录。

在指定单向外联接时,在FROM子句中命名表的顺序非常重要。对于左外部联接,指定的第一个表是联接的源表。对于右外部联接,指定的第二个表是联接的源表。因此,%INORDER%STARTTABLE优化关键字不能与RIGHT OUTER JOIN一起使用。以下语法相互矛盾,导致SQLCODE-34错误:FROM%INORDER TABLE1 RIGHT OUTER JOIN TABLE2 ON....

外部联接语法

IRIS支持两种表示外连接的格式:

  1. ANSI标准语法:LEFT OUTER JOINRIGHT OUTER JOIN。SQL标准语法将外联接放在SELECT语句的FROM子句中,而不是WHERE子句中,如下例所示:
0
0 111
文章 姚 鑫 · 十月 28, 2021 7m read

第五十九章 SQL命令 JOIN(一)

基于两个表中的数据创建表的SELECT子句。

大纲

table1 [[AS] t-alias1] CROSS JOIN table2 [[AS] t-alias2] |
table1 [[AS] t-alias1] , table2 [[AS] t-alias2]

 table1 [[AS] t-alias1]
NATURAL [INNER] JOIN |
NATURAL LEFT [OUTER] JOIN |
NATURAL RIGHT [OUTER] JOIN |
table2 [[AS] t-alias2] 

table1 [[AS] t-alias1]
[INNER] JOIN |
LEFT [OUTER] JOIN |
RIGHT [OUTER] JOIN |
FULL [OUTER] JOIN
table2 [[AS] t-alias2] 
ON condition-expression

table1 [[AS] t-alias1]
[INNER] JOIN |
LEFT [OUTER] JOIN |
RIGHT [OUTER] JOIN |
table2 [[AS] t-alias2] 
USING (identifier-commalist)
0
0 118
文章 姚 鑫 · 十月 27, 2021 2m read

第五十八章 SQL命令 %INTRANSACTION

显示事务状态。

大纲

%INTRANSACTION
%INTRANS

参数

描述

%INTRANSACTION语句设置SQLCODE以指示事务状态:

  • 如果当前在事务中,则SQLCODE=0
  • 如果不在事务中,则SQLCODE=100

事务正在进行时,%INTRANSACTION返回SQLCODE=0。此事务可以是由START TRANSACTIONSAVEPOINT发起的SQL事务。它也可以是由TSTART发起的ObjectScript事务。

事务嵌套对%INTRANSACTION没有影响。SET TRANSACTION%INTRANSACTION没有影响。

还可以使用$TLEVEL确定事务状态。%INTRANSACTION仅指示事务是否正在进行。$TLEVEL指示事务是否正在进行以及当前的事务级别数。

示例

以下嵌入式SQL示例显示%INTRANSACTION如何设置SQLCODE

0
0 175
文章 姚 鑫 · 十月 26, 2021 8m read

第五十七章 SQL命令 INTO

一个SELECT子句,指定在宿主变量中存储选定的值。

大纲

INTO :hostvar1 [,:hostvar2]...

参数

  • :hostvar1 - 在宿主语言中声明的输出宿主变量。 当在INTO子句中指定时,变量名前面加冒号(:)。 主机变量可以是局部变量(非下标或下标)或对象属性。 可以将多个变量指定为逗号分隔的列表、单个下标数组变量或逗号分隔的列表和单个下标数组变量的组合。

描述

INTO子句和主机变量仅在嵌入式SQL中使用。它们不在动态SQL中使用。在动态SQL中,%SQL.Statement类为输出变量提供了类似的功能。在通过ODBCJDBC或动态SQL处理的SELECT查询中指定INTO子句会导致SQLCODE-422错误。

INTO子句可以在SELECTDECLAREFETCH语句中使用。INTO子句对于所有三个语句都是相同的;本页上的示例都引用SELECT语句。

INTO子句使用在SELECT-ITEM列表中检索(或计算)的值来设置相应的输出主机变量,从而使这些返回的数据值可用于ObjectScript。在SELECT中,可选INTO子句出现在SELECT-ITEM列表之后、FROM子句之前。

0
0 140
文章 姚 鑫 · 十月 25, 2021 7m read

第五十六章 SQL命令 INSERT OR UPDATE

在表中添加新行或更新表中的现有行。

大纲

INSERT OR UPDATE [%keyword] [INTO] table
          SET column = scalar-expression {,column2 = scalar-expression2} ...  |
          [ (column{,column2} ...) ] VALUES (scalar-expression {,scalar-expression2} ...)  |
          VALUES :array()  |
          [  (column{,column2} ...) ] query  |
          DEFAULT VALUES

参数

0
0 241
文章 姚 鑫 · 十月 24, 2021 4m read

第五十五章 SQL命令 INSERT(四)

嵌入式SQL和动态SQL示例

下面的嵌入式SQL示例创建一个新表SQLUser.MyKids。下面的示例使用INSERT用数据填充此表。在插入示例之后,提供了一个删除SQLUser.MyKids的示例。

ClassMethod Insert2()
{
	&sql(
		CREATE TABLE SQLUser.MyKids 
		(
			KidName VARCHAR(16) UNIQUE NOT NULL,
			KidDOB INTEGER NOT NULL,
			KidPetName VARCHAR(16) DEFAULT 'no pet'
		) 
	)
	if SQLCODE=0 {
		w !,"创建的表" 
	} elseif SQLCODE=-201 {
		w !,"表已存在"  
		q
	} else {
		w !,"CREATE TABLE失败。SQLCODE=",SQLCODE 
	}
}

下面的嵌入式SQL示例插入具有两个字段值的行(第三个字段KidPetName采用默认值)。请注意,表架构名称由#SQLCompile Path宏指令作为架构搜索路径提供:

0
0 135
文章 姚 鑫 · 十月 23, 2021 12m read

第五十四章 SQL命令 INSERT(三)

SQLCODE错误

默认情况下,INSERT是要么全有要么全无的事件:要么完全插入行,要么根本不插入行。 IRIS返回一个状态变量SQLCODE,指示插入是成功还是失败。要将行插入到表中,插入操作必须满足所有表、字段名和字段值要求,如下所示。

表:

  • 该表必须已经存在。尝试插入到不存在的表会导致SQLCODE-30错误。
  • 不能将该表定义为READONLY。尝试编译引用ReadOnly表的插入会导致SQLCODE-115错误。请注意,此错误是在编译时发出的,而不是在执行时发出的。
  • 如果通过视图更新表,则不能将该视图定义为只读。尝试这样做会导致SQLCODE-35错误。如果视图基于分割表,则不能通过使用CHECK OPTION定义的视图进行插入。尝试这样做会导致SQLCODE-35,其中不允许基于带有CHECK选项条件的切片表的视图(sample.myview)使用%msg INSERT/UPDATE/DELETE
  • 必须具有适当的权限才能插入表

字段名称:

0
0 243
文章 姚 鑫 · 十月 22, 2021 6m read

第五十三章 SQL命令 INSERT(二)

流数据

可以将以下类型的数据值插入到流字段中:

  • 对于任何表:字符串文字或包含字符串文字的主机变量,例如:
    set literal="Technique 1"

    //do the insert; use a string
    &sql(INSERT INTO MyStreamTable (MyStreamField) VALUES (:literal))
  • 对于非切片表:对流对象的对象引用(OREF)。 IRIS打开此对象并将其内容复制到新的流字段中。例如:
    set oref=##class(%Stream.GlobalCharacter).%New()
    do oref.Write("Technique non-shard 1")

    //do the insert; use an actual OREF
    &sql(INSERT INTO MyStreamTable (MyStreamField) VALUES (:oref))

或流的OREF的字符串版本,例如:

0
0 145
文章 姚 鑫 · 十月 21, 2021 10m read

第五十二章 SQL命令 INSERT(一)

向表中添加新行(或多行)。

大纲

INSERT [%keyword] [INTO] table
          SET column1 = scalar-expression1 
                 {,column2 = scalar-expression2} ...  |
          [ (column1{,column2} ...) ] 
                 VALUES (scalar-expression1 {,scalar-expression2} ...)  |
          VALUES :array()  |
          [ (column1{,column2} ...) ] query  |
          DEFAULT VALUES

参数

0
0 288
文章 姚 鑫 · 十月 20, 2021 6m read

第五十一章 SQL命令 HAVING(二)

In和%INLIST谓词

IN谓词用于将值与一系列非结构化的项进行匹配。

%INLIST谓词是 IRIS扩展,用于将值与列表结构的元素进行匹配。

使用任一谓词,都可以执行相等比较和子查询比较。

在中有两种格式。第一个用作使用与OR运算符链接在一起的多个相等比较的速记。例如:

SELECT Name, Home_State FROM Sample.Person
GROUP BY Home_State
HAVING Home_State IN ('ME','NH','VT','MA','RI','CT')

如果Home_State等于括号列表中的任意值,则计算为TRUE。列表元素可以是常量或表达式。排序规则适用于IN比较,因为它适用于相等性测试。默认情况下,IN比较使用字段定义的排序规则类型;默认情况下,字符串字段定义为SQLUPPER,不区分大小写。

当日期或时间用于IN谓词相等比较时,会自动执行适当的数据类型转换。如果HAVING子句字段是TIMESTAMP类型,则DATETIME类型的值将转换为TIMESTAMP。如果HAVING子句字段为DATE类型,则TIMESTAMPSTRING类型的值将转换为DATE。如果HAVING子句字段为TIME类型,则TIMESTAMPSTRING类型的值将转换为TIME

0
0 132
文章 姚 鑫 · 十月 19, 2021 5m read

第五十章 SQL命令 HAVING(一)

对一组数据值指定一个或多个限制性条件的SELECT子句。

大纲

SELECT field
FROM table
GROUP BY field
HAVING condition-expression

SELECT aggregatefunc(field %AFTERHAVING)
FROM table
[GROUP BY field]
HAVING condition-expression

参数

  • condition-expression - 由一个或多个布尔谓词组成的表达式,用于控制要检索哪些数据值。

描述

可选的HAVING子句出现在FROM子句、可选的WHEREGROUP BY子句之后,可选的ORDER BY子句之前。

SELECT语句的HAVING子句限定或取消查询选择中的特定行。符合条件的行是条件表达式为真的行。条件表达式是一系列逻辑测试(谓词),它们可以通过ANDOR逻辑运算符链接起来。

HAVING子句类似于WHERE子句,它可以在组上操作,而不是在整个数据集上操作。因此,在大多数情况下,HAVING子句要么与使用%AFTERHAVING关键字的聚合函数一起使用,要么与GROUP BY子句结合使用,或者两者兼而有之。

HAVING子句条件表达式还可以指定聚合函数。WHERE子句条件表达式不能指定聚合函数。下面的示例显示了这一点:

0
0 156
文章 姚 鑫 · 十月 18, 2021 8m read

第四十九章 SQL命令 GROUP BY

SELECT子句,它根据一个或多个列对查询的结果行进行分组。

大纲

SELECT ...
GROUP BY field {,field2}

参数

  • field - 从其中检索数据的一个或多个字段。 单个字段名或以逗号分隔的字段名列表。

描述

GROUP BYSELECT命令的一个子句。 可选的GROUP BY子句出现在FROM子句和可选的WHERE子句之后,可选的HAVINGORDER BY子句之前。

GROUP BY子句接受查询的结果行,并根据一个或多个数据库列将它们分成单独的组。 当将SELECTGROUP BY结合使用时,将为GROUP BY字段的每个不同值检索一行。 GROUP BYNULL(没有指定值)字段作为一个独立的值组。

GROUP BY子句在概念上类似于 IRIS聚合函数扩展关键字%FOREACH,但是GROUP BY操作整个查询,而%FOREACH允许在子填充上选择聚合,而不限制整个查询填充。

GROUP BY可以在INSERT命令的SELECT子句中使用。 不能在UPDATEDELETE命令中使用GROUP BY

指定字段

0
0 139
文章 姚 鑫 · 十月 17, 2021 7m read

第四十八章 SQL命令 GRANT(二)

GRANT COLUMN-权限

列权限授予用户或角色对指定表或视图上的指定列列表的指定权限。这允许访问某些表列,而不允许访问同一表的其他列。这提供了比GRANT OBJECT-PRIVICATION选项更具体的访问控制,后者定义了整个表或视图的权限。向被授权者授予权限时,应为表授予表级权限或列级权限,但不能同时授予两者。SELECTINSERTUPDATEREFERENCES权限可用于授予对单个列中数据的访问权限。

对具有GRANT OPTION的表具有SELECTINSERTUPDATEREFERENCES对象权限的用户可以向其他用户授予该表的列的相同类型的列权限。

可以指定单个列,也可以指定逗号分隔的列列表。列列表必须用括号括起来。列名可以按任意顺序指定,允许重复。将COLUMN特权授予已具有该特权的列不起作用。

以下示例授予两列的UPDATE权限:

GRANT UPDATE(Name,FavoriteColors) ON Sample.Person TO Deborah

可以授予表或视图的列特权。可以向任何类型的被授权者授予列权限,包括用户列表、角色列表、*_PUBLIC。但是,不能将星号(*)通配符用于权限、字段名或表名。

0
0 146
文章 姚 鑫 · 十月 16, 2021 8m read

第四十七章 SQL命令 GRANT(一)

向用户或角色授予特权。

大纲

GRANT admin-privilege TO grantee [WITH ADMIN OPTION]

GRANT role TO grantee [WITH ADMIN OPTION] 

GRANT object-privilege ON object-list TO grantee [WITH GRANT OPTION]

GRANT SELECT ON CUBE[S] object-list TO grantee [WITH GRANT OPTION]

GRANT column-privilege (column-list) ON table TO grantee  [WITH GRANT OPTION]  

参数

0
0 224
文章 姚 鑫 · 十月 15, 2021 8m read

[toc]

第四十六章 SQL命令 FROM(二)

%PARALLEL

这个可选关键字在查询的FROM子句中指定。 它建议 IRIS使用多个处理器(如果适用)并行处理查询。 这可以显著提高使用一个或多个COUNTSUMAVGMAXMIN聚合函数和/或GROUP BY子句的某些查询的性能,以及许多其他类型的查询。 这些通常是处理大量数据并返回小结果集的查询。 例如,SELECT AVG(SaleAmt) FROM %PARALLEL User.AllSales GROUP BY Region使用并行处理。

既指定单个字段又指定聚合函数且不包含GROUP BY子句的查询不能执行并行处理。 例如,SELECT Name,AVG(Age) FROM %PARALLEL SamplePerson不执行并行处理,而是从SELECT Name,AVG(Age) FROM %PARALLEL Sample.Person GROUP BY Home_State执行并行处理。

%PARALLEL用于SELECT查询及其子查询。 INSERT命令子查询不能使用%PARALLEL

指定%PARALLEL可能会降低某些查询的性能。 在具有多个并发用户的系统上使用%PARALLEL运行查询可能会导致整体性能下降。

0
0 162
文章 姚 鑫 · 十月 14, 2021 9m read

第四十五章 SQL命令 FROM(一)

一个SELECT子句,指定要查询的一个或多个表。

大纲

SELECT ... FROM [optimize-option] table-ref [[AS] t-alias][,table-ref [[AS] t-alias]][,...]

参数

  • optimize-option - 可选-指定查询优化选项(优化器提示)的单个关键字或由空格分隔的一系列关键字。支持以下关键字:%ALLINDEX%FIRSTTABLE TABLE TABNAME%FULL%IGNOREINDEX NAME%INORDER%NOFLATTEN%NOMERGE%NOREDUCE%NOSVSO%NOTOPOPT%NOUNIONOROPT%PARALLEL%STARTTABLE
  • table-ref - 从其中检索数据的一个或多个表、视图、表值函数或子查询,以逗号分隔的列表或使用JOIN语法指定。 在使用带有JOIN语法的视图时存在一些限制。 可以指定一个用括号括起来的子查询。
  • AS t-alias - 可选—表名的别名。 必须是有效的标识符。

描述

FROM子句指定在SELECT语句中查询数据的一个或多个表(或视图或子查询)。 如果没有查询表数据,则FROM子句是可选的,如下所述。

0
0 155
文章 姚 鑫 · 十月 13, 2021 2m read

第四十四章 SQL命令 FREEZE PLANS

冻结查询计划。

大纲

FREEZE PLANS BY ID statement-hash

FREEZE PLANS BY TABLE table-name

FREEZE PLANS BY SCHEMA schema-name

FREEZE PLANS

参数

  • statement-hash - 查询计划的SQL语句定义的内部哈希表示,用引号括起来。 偶尔,看起来相同的SQL语句可能有不同的语句散列项。 需要SQL语句的不同代码生成的设置/选项的任何差异都会导致不同的语句散列。 这种情况可能发生在支持不同内部优化的不同客户机版本或不同平台上。
  • table-name - 现有表或视图的名称。 表名可以是限定的(schema.table),也可以是非限定的(table)。 非限定表名接受默认模式名。
  • schema-name - 现有模式的名称。 该命令冻结指定模式中所有表的所有查询计划。

描述

FREEZE PLANS命令用来冻结查询计划。 需要解冻已冻结的查询计划,使用unfreeze plans命令。

“冻结计划”可以冻结“计划状态”为“未冻结”的查询计划。 它不能冻结计划状态为“Unfrozen/Parallel”的查询计划。

FREEZE PLANS为冻结查询计划提供了四种语法形式:

0
0 120
文章 姚 鑫 · 十月 12, 2021 3m read

第四十三章 SQL命令 FETCH

重新定位游标,并从中检索数据。

大纲

FETCH cursor-name [INTO host-variable-list ]

参数

  • cursor-name - 当前打开的游标的名称。 游标名称是在DECLARE命令中指定的。 游标名称区分大小写。
  • INTO host-variable-list - 可选—将取操作列中的数据放入局部变量中。 host-variable-list指定一个主机变量或一个逗号分隔的主机变量列表,它们是包含与游标关联的数据的目标。 INTO句是可选的。 如果没有指定,FETCH语句只定位游标。

描述

在嵌入式SQL应用程序中,FETCH语句从游标检索数据。 所需的操作顺序是:DECLAREOPENFETCHCLOSE。 在未打开的游标上尝试FETCH会导致SQLCODE -102错误。

作为SQL语句,这只在嵌入式SQL中得到支持。 通过ODBC使用ODBC API支持等价的操作。

INTO子句可以指定为DECLARE语句的子句,也可以指定为FETCH语句的子句,或者两者都指定。 INTO子句允许将fetch列中的数据放到本地主机变量中。 列表中的每个主机变量,从左到右,都与游标结果集中的相应列相关联。 每个变量的数据类型必须匹配或支持对应结果集列的数据类型的隐式转换。 变量的数量必须与游标选择列表中的列数匹配。

0
0 184
文章 姚 鑫 · 十月 11, 2021 5m read

第四十二章 SQL命令 EXPLAIN

返回指定查询的查询计划。

大纲

EXPLAIN [ALT] [STAT]  [INTO :host-variable] query

参数

  • ALT - 可选-返回备用查询计划。默认情况下,返回单个查询计划。
  • STAT - 可选-(仅限动态SQL):返回查询计划运行时性能统计信息。默认情况下,返回不带运行时统计信息的查询计划。对于嵌入式SQL,此语法被忽略。
  • INTO :host-variable - 可选-(仅限嵌入式SQL):放置查询计划的输出主机变量。对于动态SQL,此语法被忽略。
  • query - SELECT query

描述

EXPLAIN命令以xml标记文本字符串的形式返回指定查询的查询计划。 该查询计划作为一个结果集返回,该结果集由一个名为plan的字段组成。

查询必须是SELECT查询。 EXPLAIN不能用于创建查询计划的其他SQL操作,例如带SELECT子句的INSERT。 指定不以SELECT关键字开始的查询将导致SQLCODE -51。 可以使用Show Plan显示非select查询的查询计划。

ALTSTAT关键字可以以任何顺序指定。 INTO关键字必须在这些关键字之后指定。

可选的ALT关键字生成备用查询计划。 所有备用查询计划都以相同的xml标记文本字符串返回。 规范化查询文本(标记为<sql>)在每个查询计划之前列出。

0
0 134
文章 姚 鑫 · 十月 10, 2021 3m read

第四十一章 SQL命令 DROP VIEW

删除视图

大纲

DROP VIEW view-name [CASCADE | RESTRICT]

参数

  • view-name 要删除的视图的名称。 视图名可以是限定的(schema.viewname),也可以是非限定的(viewname)。 非限定视图名接受默认模式名。
  • CASCADE RESTRICT - 可选-指定CASCADE关键字以删除引用view-name的任何其他视图。如果有另一个视图引用view-name,则指定RESTRITE将发出SQLCODE-321错误。默认值为限制。

描述

DROP VIEW命令删除视图,但不删除基础表或数据。

也可以使用DropView()方法调用来调用拖放视图操作:

$SYSTEM.SQL.Schema.DropView(viewname,SQLCODE,%msg)

权限

0
0 177