第五十二章 SQL函数 DEGREES

176 阅读5分钟

「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战

第五十二章 SQL函数 DEGREES

将弧度转换为角度的数值函数。

大纲

DEGREES(numeric-expression)

{fn DEGREES(numeric-expression)}

参数

  • numeric-expression - 以弧度表示的角度的量度。解析为数值的表达式。

度返回NUMERICDOUBLE数据类型。如果NUMERIC-EXPRESSION的数据类型为DOUBLE,则度返回DOUBLE;否则返回NUMERIC

度数可以指定为标准标量函数,也可以指定为使用大括号语法的ODBC标量函数。

描述

DEGREES以弧度为单位进行角度测量,并以度为单位返回相应的角度测量值。如果传递空值,度将返回空。

返回值的默认精度为36,默认小数位数为18

可以使用弧度函数将度数转换为弧度。

示例

下面的嵌入式SQL示例返回与弧度值0到6对应的等价度:

ClassMethod Degrees()
{
	s a = 0
	while a < 7 {
		&sql(SELECT DEGREES(:a) INTO :b)
		if SQLCODE '= 0 {
			w !,"Error code ",SQLCODE
			q 
		} else {
			w !,"radians ",a," = degrees ",b
			s a=a+1 }
		}
}

DHC-APP>d ##class(PHA.TEST.SQLCommand).Degrees()
 
radians 0 = degrees 0
radians 1 = degrees 57.29577951308232089
radians 2 = degrees 114.5915590261646418
radians 3 = degrees 171.8873385392469627
radians 4 = degrees 229.1831180523292836
radians 5 = degrees 286.4788975654116045
radians 6 = degrees 343.7746770784939253

向具有现有数据的表添加行级安全性

要将行级安全性添加到具有现有数据的表中,请首先按照上一节“设置行级安全性”中所述的步骤进行操作。然后:

  1. 重建表的索引。
  2. 更新列出可以查看每一行的用户和角色的属性的值。

重建索引

警告:当用户访问该表的数据时,请勿重建索引。这样做可能会导致查询结果不准确。

重建表索引的过程是:

  1. 如果表中定义了任何具有WITH CHECK OPTION子句的视图,请使用DROP VIEW命令删除这些视图。(可以在更新谁有权访问每一行后重新创建这些视图)。

  2. 转到管理门户网站SQL页面 ([Home] > [SQL]),然后选择包含表的名称空间。

  3. 选择浏览SQL模式,该页面显示 [Home] > [SQL] > [Schemas] 页面。

  4. 在“Schemas ”页面上,在包含刚修改的表的包的行中,选择“Tables ”以显示其表页面。

  5. 在“Tables”页面上,在“Name ”列中选择表的名称以显示“Table Properties”页面。

  6. 在“Table Properties”页面上,选择“Rebuild Indices”以重建索引。

可以查看每一行的更新

  1. 从管理门户主页上,转到“执行SQL查询”页面 ([Home] > [SQL] > [Execute SQL Query])页面。
  2. 选择包含表的名称空间。
  3. 在“Execute SQL Query ”页面上的可编辑区域中,发出一条语句以更新表。它应具有以下形式:
UPDATE MySchema.MyClass SET rlsprop = 
                MySchema.SecurityPolicy(MySQLColumnName1, ...)
  • MySchema是包含该类的架构(包)。
  • MyClass是类的名称。
  • rlsprop是包含可以读取该行的用户和角色列表的字段。默认情况下为%READERLIST,否则为ROWLEVELSECURITY参数的声明中指定的属性名称。
  • SecurityPolicy是由%SecurityPolicy()方法的定义中的SqlName值指定的值。如果%SecurityPolicy()方法没有显式的SQL名称,并且其类为MySchema.MyClass,则其默认名称为myClass_sys_SecurityPolicy(具有MySchema.MyClass_sys_SecurityPolicy的完全限定形式)。
  • MySQLColumnName1,...是与%SecurityPolicy()类方法中定义的参数(如果有)相对应的SQL列名称的集合。
  1. 单击执行查询。
  2. 如果需要,请重新创建最初删除的任何视图。

性能提示和信息

%READERLIST属性是一个计算字段,其值由%SecurityPolicy()方法确定。每当发生INSERT或UPDATE时,都会为该行调用%SecurityPolicy()并填充%READERLIST的值。

定义了%READERLIST属性上的集合索引,并且当启用行级安全性时,查询优化器可以利用该集合索引来最大程度地降低性能影响。

默认情况下,将ROWLEVELSECURITY设置为1时,将为%READERLIST属性(列)定义一个收集索引,因为安全策略通常可以返回多个逗号分隔的角色或用户名。如果安全策略永远不会返回一个以上的用户或角色名称,则可以覆盖ROWLEVELSECURITY参数,并将%RLI索引显式定义为普通(非集合)位图索引。通常,这可提供最佳性能。

安全提示和信息

使用行级安全性时,请记住以下安全性因素:

  • 行级安全性除表级安全性外还起作用。要执行SELECT,INSERT,UPDATE或DELETE语句,必须为用户授予相关行的表级访问和行级访问权限。

  • 在尝试运行SQL命令时,会在运行时动态检查用户特权。

  • 如果创建可更新视图并指定WITH CHECK OPTION,则对该视图的INSERT操作将检查要插入的行是否通过了该视图中指定的WHERE子句。此外,如果要从具有行级安全性的表创建视图,则如果要发出的视图的WHERE语句或隐式行级安全性谓词导致该行不可见,则INSERT失败视图上的SELECT * FROM命令。

  • 如果有权访问某行,则可以更改%READERLIST字段的值(或包含可查看该行的用户和角色的列表的任何字段)。这意味着可以执行直接或间接删除对行的访问的操作。

  • 如果在未定义行级安全性的情况下尝试插入将违反UNIQUE约束的行,则在定义行级安全性的情况下仍然会违反约束,无论导致约束失败的行是否可见到更新的事务。