第十四章 SQL命令 CREATE TABLE(一)
创建表
大纲
创建表
创建角色
CREATE ROLE role-name
role-name - 要创建的角色的名称,它是一个标识符。角色名称不区分大小写。CREATE ROLE命令可创建角色。角色是可以分配给多个用户的一组命名权限。一个角色可以分配给多个用户,一个用户可以分配多个角色。角色在系统范围内可用,它不限于特定的命名空间。
角色名可以是最多64个字符的任何有效标识符。角色名称必须遵循标识符命名约定。角色名称可以包含Unicode字符。角色名称不区分大小写。如果选中了支持分隔标识符配置选项(默认设置),则角色名可以是用引号括起来的分隔标识符。如果是分隔标识符,则角色名可以是SQL保留字。它可以包含句点(.)、插入符号(^)和两个字符的箭头序列(->)。它不能包含逗号(,)或冒号(:)字符。它可以以除星号(*)以外的任何有效字符开头。
最初创建角色时,角色只是一个名称;它没有权限。要向角色添加权限,请使用GRANT命令。还可以使用GRANT命令为角色分配一个或多个角色。这允许创建角色层次结构。
如果调用CREATE ROLE来创建已经存在的角色,SQL会发出SQLCODE-118错误。可以通过调用$SYSTEM.SQL.Security.RoleExists()方法确定角色是否已存在:
WRITE $SYSTEM.SQL.Security.创建Query
CREATE QUERY queryname(parameter_list) [characteristics]
[ LANGUAGE SQL ]
BEGIN
code_body ;
END
CREATE QUERY queryname(parameter_list) [characteristics]
LANGUAGE OBJECTSCRIPT
{ code_body }
queryname - 要在存储过程类中创建的查询的名称。queryname必须是有效的标识符。过程名可以是限定的(schema.procname),也可以是非限定的(procname)。非限定过程名接受默认模式名。即使没有指定参数,queryname也必须后跟括号。parameter_list - 可选-传递给查询的参数列表。参数列表用圆括号括起来,列表中的参数用逗号分隔。即使没有指定参数,括号也是必须的。characteristics - 可选-指定查询特征的一个或多个关键字。允许的关键字有结果、容器ID、FOR、FINAL、PROCEDURE、SELECTMODE。多个特征由空白(空格或换行符)分隔。特性可以以任何顺序指定。InterSystems IRIS/Caché未提供开箱即用的变更数据捕获(CDC)工具,而且由于其多模型建模能力和底层的多维存储模型,相对于关系型数据库的单一模型,针对于SQL的CDC在InterSystems IRIS/Caché上会更复杂一些。例如通过Journal日志记录的是底层持久化多维数组的数据变更,而不是SQL table的变更。
通常,在应用层面实现变更数据捕获是更灵活和简单的方式,例如通过设置触发器、类的DSTIME参数。但如果无法在应用层做CDC,可以考虑使用InterSystems IRIS/Caché的Journal和强大的开发能力获取数据变更。
这里介绍使用InterSystems IRIS/Caché的Reporting类型的异步镜像成员获取数据变更。
用于创建方法的特征与用于创建查询的特征不同。
如果指定的特征无效,系统将生成SQLCODE -47错误。
指定重复的特征将导致SQLCODE -44错误。
可用的方法特征关键字如下:
| 方法关键字 | 含义 |
|---|---|
FOR className |
指定要在其中创建方法的类的名称。如果这个类不存在,它将被创建。还可以通过限定方法名来指定类名。FOR子句中指定的类名通过限定方法名重写指定的类名。如果使用FOR my.class语法指定类名, IRIS将用Sqlname=procname定义类方法。因此,该方法应该作为my.procname()调用(而不是my.class_procname())。 |
FINAL |
指定子类不能重写该方法。默认情况下,方法不是final。FINAL关键字由子类继承。 |
PRIVATE |
指定该方法只能由它自己的类或子类的其他方法调用。默认情况下,方法是公共的,可以不受限制地调用。这个限制由子类继承。 |
RESULT SETS,DYNAMIC RESULT SETS [n] |
指定创建的方法将包含ReturnResultsets关键字。这一特征短语的所有形式都是同义词。 |
RETURNS datatype |
指定调用该方法返回的值的数据类型。 |
<Ens>ErrRequestNotHandled: 请求消息 '8@Cenboomh.Soap.DT.request' 未被处理
问题:
1、EnableVSSBackup这个参数在哪里设置?
2、Cache是否有自己的writer,如果有,怎样查到,叫什么名?
3、实现Cache的全量增量备份,使用VSS是否是最佳实践?
4、是否有Cache全量增量备份的实践案例,以供参考?
————————————————————————————————————————————————————————————————————————————————
我参考这篇官方文档,在启动应用时EnableVSSBackup会默认设置为1,但是我在配置或者应用界面中并没有看到这参数。
https://docs.intersystems.com/latest/csp/docbook/Doc.View.cls?KEY=GCDI_…
.png)
在 Cache启动的时候,我在日志中并没有收到”Caché VSS Writer started“的信息;而且我在cache.cpf里添加EnableVSSBackup 字段为1,再启动cache会得到下面的乱码信息。
.png)
在医院信息化领域,中日联谊医院最近一次站在行业瞩目的聚光灯下,是在2021年7月。在国家卫生健康委统计信息中心发布的《关于2020年度国家医疗健康信息互联互通标准化成熟度测评结果公示的通知》中,9家医院获评五级乙等,中日联谊医院名列其中。这也是目前为数不多的“通关”互联互通五乙的医院之一。
本地库 在打开studio、studio编译类、关闭studio等操作系统卡死,关闭后连接超时。
打开cconsole.log报错日志,提示***严重的磁盘读写错误,I/O错误***,对数据库做了一致性检查,也未发现错误,必须重启电脑或者force库后恢复使用。
请问是什么问题造成的。。。
09/08/21-08:33:52:611 (11940) 1 [SYSTEM MONITOR] DiskPercentFull(d:\cachedb\hippapp\) Warning: DiskPercentFull = 95.08 ( Warnvalue is 95).
09/08/21-08:33:52:617 (11940) 1 [SYSTEM MONITOR] DiskPercentFull(d:\cachedb\hippmsg\) Warning: DiskPercentFull = 95.08 ( Warnvalue is 95).
创建作为SQL存储过程公开的方法或查询。
可用的关键字如下:
FOR className - 指定要在其中创建方法的类的名称。
如果这个类不存在,它将被创建。
还可以通过限定方法名来指定类名。
FOR子句中指定的类名通过限定方法名重写指定的类名。FINAL - 指定子类不能重写该方法。
默认情况下,方法不是final。
FINAL关键字由子类继承。PRIVATE - 指定该方法只能由它自己的类或子类的其他方法调用。
默认情况下,方法是公共的,可以不受限制地调用。
这个限制由子类继承。PROCEDURE - 指定该方法是一个SQL存储过程。
存储过程由子类继承。
(这个关键字可以缩写为PROC。)RESULT SETS ,DYNAMIC RESULT SETS [n] - 指定创建的方法将包含ReturnResultsets关键字。
这一特征短语的所有形式都是同义词。RETURNS datatype - 指定调用该方法返回的值的数据类型。
如果省略RETURNS,则该方法不能返回值。
这个规范由子类继承,并且可以由子类修改。
该数据类型可以指定类型参数,如MINVAL、MAXVAL和SCALE。
例如RETURNS DECIMAL(19,4)我想在centos访问我部署在windows上的cache 数据库, 我使用了**InterSystems.Data.CacheClient.dll **在我的linux程序中,但是它不能正常的在centos机器上运行,但是可以在我的windows平台运行(改windows平台不是安装cache数据库,并且也没有安装任何cache 软件),有人知道这个怎么解决吗?
try { if (conn.State != ConnectionState.Open) { conn.Open(); } CacheCommand cmd = new CacheCommand(); cmd.Connection = this.conn; if (inTransaction) cmd.Transaction = trans; DataSet ds = new DataSet(); CacheDataAdapter ad = new CacheDataAdapter(); cmd.CommandText = QueryString; //CLogger._log.Debug(QueryString); ad.SelectCommand = cmd; ad.Fill(ds); ad.Dispose(); return ds; } catch (Exception e2) { throw e2; }
在类中创建方法。
CREATE [STATIC] METHOD name (parameter_list)
[ characteristics ]
[ LANGUAGE SQL ]
BEGIN
code_body ;
END
CREATE [STATIC] METHOD name (parameter_list)
[ characteristics ]
LANGUAGE OBJECTSCRIPT
{ code_body }
name - 要在存储过程类中创建的方法的名称。
名称必须是有效的标识符。
过程名可以是限定的(schema.procname),也可以是非限定的(procname)。
非限定过程名接受默认模式名。
名称后面必须跟括号,即使没有指定参数。parameter_list - 可选——传递给方法的参数列表。
参数列表用圆括号括起来,列表中的参数用逗号分隔。
即使没有指定参数,括号也是必须的。characteristics - 可选—指定方法特征的一个或多个关键字。
允许的关键字是RETURNS, FOR, FINAL, PRIVATE, PROCEDURE, SELECTMODE使用UNIQUE关键字,可以指定索引中的每条记录都有一个唯一的值。
更具体地说,这确保了索引(以及包含索引的表)中的两条记录不能具有相同的排序值。
默认情况下,大多数索引使用大写字符串排序(使搜索不区分大小写)。
在本例中,值“Smith”和“SMITH”被认为是相等的,而不是唯一的。
CREATE INDEX不能指定非默认索引字符串排序规则。
通过在类定义中定义索引,可以为各个索引指定不同的字符串排序规则。
可以更改名称空间的默认排序规则,使字段/属性在默认情况下区分大小写。 更改此选项需要重新编译命名空间中的所有类并重新构建所有索引。 转到Management Portal,选择Classes选项,为存储的查询选择名称空间,并使用Compile选项重新编译相应的类。 然后重建所有指数。 它们将区分大小写。
注意:当表的数据被其他用户访问时,不要重建索引。 这样做可能会导致不准确的查询结果。
使用BITMAP关键字,你可以指定这个索引将是位图索引。
位图索引由一个或多个位字符串组成,其中位位置表示行id,每个位值表示该行字段(或合并字段名字段的值)的特定值的存在(1)或不存在(0)。
为表创建索引。
CREATE [UNIQUE | BITMAP | BITMAPEXTENT | BITSLICE ] INDEX index-name
ON [TABLE] table-name
(field-name, ...)
[AS index-class-name [ (parameter-name = parameter_value, ... ) ] ]
[WITH DATA (datafield-name, ...)]
UNIQUE - 可选的——一个约束,确保表中不会有两行索引中所有字段的值相同。不能为位图或位片索引指定此关键字。UNIQUE关键字后面可以跟(或被)CLUSTERED或NONCLUSTERED关键字替换。
这些关键字是no-ops;
它们是为了与其他供应商兼容而提供的。BITMAP - 可选—表示创建位图索引。
位图索引允许对具有少量不同值的字段进行快速查询。BITMAPEXTENT - 可选-表示应该创建位映射范围索引。
一个表最多只能创建一个位映射范围索引。
BITMAPEXTENT中没有指定字段名。BITSLICE - 可选—创建位片索引。用数据填充一个或多个索引。
BUILD INDEX [%NOLOCK] [%NOJOURN] FOR TABLE table-name [INDEX index-name [,index-name]]
BUILD INDEX [%NOLOCK] [%NOJOURN] FOR SCHEMA schema-name
BUILD INDEX [%NOLOCK] [%NOJOURN] FOR ALL
FOR TABLE table-name - 已存在表的名称。
表名可以是限定的(schema.table),也可以是非限定的(table)。
非限定表名接受默认模式名。INDEX index-name - 可选—索引名称或以逗号分隔的索引名称列表。
如果指定,则只构建这些索引。
如果未指定,将构建为表定义的所有索引。FOR SCHEMA schema-name - 现有模式的名称。
此命令为指定模式中的所有表构建所有索引。BUILD INDEX提供了三种语法形式来构建/重新构建所有已定义的索引:
Table: BUILD INDEX FOR TABLE table-name. 可选的INDEX子句允许仅构建/重新构建指定的索引。修改视图。
ALTER VIEW view-name [(column-commalist)] AS query [WITH READ ONLY]
ALTER VIEW view-name [(column-commalist)] AS query [WITH [level] CHECK OPTION]
| 参数 | 描述 |
|---|---|
view-name |
被修改的视图,它具有与表名相同的命名规则。视图名可以是限定的(schema.viewname),也可以是非限定的(viewname)。非限定视图名接受默认模式名。 |
column-commalist |
可选-组成视图的列名。如果这里没有指定,可以在查询中指定列名,如下所示。 |
query |
作为视图基础的结果集(来自查询)。 |
WITH READ ONLY |
可选-指定不能通过此视图对视图所基于的表执行插入、更新或删除操作。默认情况下,允许通过视图进行这些操作,约束如下所示。 |
WITH level CHECK OPTION |
可选-指定如何通过此视图对视图所基于的表执行插入、更新或删除操作。级别可以是关键字LOCAL或CASCADED。如果没有指定级别,则WITH CHECK OPTION默认为级联。 |
ALTER VIEW命令用于修改视图。
2021 年 8 月的学习资料现在可以在learning.intersystems.com上独家获取!您可以:
注意:老是错过最新消息?别担心,我们会在9月恢复正常的邮件发送。