Caché数据库学习笔记(3)
目录
Query函数及其测试
重建索引表
Management portal简介
远程访问Ensemble
===================================================
===================================================
Query函数及其测试:
query工作原理:
.cls部分:
首先根据query传入数据建立索引表IdxA(需要在portal里build)声明query时设置函数名、传入变量和传出变量列表包含三个classmethod: Execute, Fetch, Close
Execute设置查找数据时的依据,包含全部主键及索引,存入qHandle数组里
Fetch为主体,传入查找依据(qHandle), Row(需要得到的列表), AtEnd(0可以进行下去,1终止)
设置初始值:AtEnd = 1(若后面查找不到数据则终止), Row为空,查找依据数组设置回变量方便写函数,调用Routine,将返回值赋给各个变量,为下一次循环准备
Query GetPlan(Status As %Integer, StartDate As %Integer) As %Query(ROWSPEC = "PlanNo:%String,PatientId:%String,StartDate:%Integer,EndDate:%Integer,Module:%String,Status:%Integer,DoctorId:%String") [ SqlProc ]
{
} ClassMethod GetPlanExecute(ByRef qHandle As %Binary, Status As %Integer, StartDate As %Integer) As %Status
{
Set qHandle(0) = "" ;PlanNo
Set qHandle(1) = StartDate
Set qHandle(2) = Status
Quit $$$OK
} ClassMethod GetPlanClose(ByRef qHandle As %Binary) As %Status [ PlaceAfter = GetPlanExecute ]
{
Kill qHandle
Quit $$$OK
} ClassMethod GetPlanFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status [ PlaceAfter = GetPlanExecute ]
{
Set AtEnd = 1
Set Row = ""
Set PlanNo = qHandle(0)
Set StartDate = qHandle(1)
Set Status = qHandle(2)
Set Data = $$GetPlan^Ps.Plan(PlanNo, StartDate, Status)
Set AtEnd = $ListGet(Data,1)
Set Row = $ListGet(Data,2)
Set qHandle(0) = $ListGet(Data,3)
Set qHandle(1) = $ListGet(Data,4)
Set qHandle(2) = $ListGet(Data,5)
Quit $$$OK
}
.mac文件部分:
query逻辑:
启动:传入StartDate和Status,PlanNo为空,根据Status和IdxA由后向前找到第一条数据的StartDate进入while循环:目的是在不传出有效数据的情况下不必跳出Fetch
过程:判断StartDate是否符合条件,若不符合跳出并终止Fetch根据IdxA, Status, StartDate找到一条数据并设定PlanNo判断PlanNo不为空的时候,进行查找和传出数据;否则按照之前的方法查找下一条数据并再次进入循环传出AtEnd值(0可以继续进入Fetch,1终止Fetch), Row(返回的列表), PlanNo, Status, StartDate根据这三者查找下一条数据
GetPlan(PlanNo, StartDate, Status) Public
{ If (PlanNo '= "")
{
Goto Next
} // -1表示从后向前查找,因为该函数的目的是找时间最近的,因此从后向前查找会避免很多问题
Set StartDate = $Order(@$$$PsPlanI@("IdxA", Status, StartDate), -1) While (StartDate '= "")
{ If (StartDate <)
{
Goto Exit
} Next
Set PlanNo = $Order(@$$$PsPlanI@("IdxA", Status, StartDate, PlanNo), -1)
If (PlanNo '= "")
{
Set Data = $Get(@$$$PsPlanD@(PlanNo))
Set PatientId = $ListGet(Data, $$$PsPlanPatientId)
Set StartDate = $ListGet(Data, $$$PsPlanStartDate)
Set EndDate = $ListGet(Data, $$$PsPlanEndDate)
Set Module = $ListGet(Data, $$$PsPlanModule)
Set Status = $ListGet(Data, $$$PsPlanStatus)
Set DoctorId = $ListGet(Data, $$$PsPlanDoctorId) Set Row = $ListBuild(PlanNo, PatientId, StartDate, EndDate, Module, Status, DoctorId) Set AtEnd = 0
Goto Exit
} Set StartDate = $Order(@$$$PsPlanI@("IdxA", Status, StartDate), -1)
} Exit
Set Ret = $ListBuild(AtEnd, Row, PlanNo, StartDate, Status)
Quit Ret
}
Query 的测试方法写在routine中,
// do TestGetPlan^Ps.Plan()
TestGetPlan() Public
{
Set rs = ##Class(%ResultSet).%New("Ps.Plan:GetPlan")
do rs.Execute(4, 20160926)
While rs.Next()
{
w " PlanNo"_rs.GetData(1)_" StartDate"_rs.GetData(3)_" Status"_rs.GetData(6),!
}
do rs.Close()
Kill rs
Quit
}
需要注意的是,非主键的属性作为索引时,在I表里小写会自动转成大写;非必需的属性作为索引,在I表里会自动在前面加一个空格。这里我自己的推测是在索引时,非必需的属性可能为空,而在routine中,是要根据这个属性进行索引的,为防止可能为空的数据无法被索引到,会自动在前面加一个空格。因此在写query的routine时,要注意在编码时加空格匹配;在test时,要注意大小写和空格的问题。
===================================================
重建索引表:
正常输入数据后,数据存放在D表中,而query在查找数据时,会使用索引表(I表)。I表是根据D表和cls文件中的设置建立起来的
Management portal/system explorer/SQL
更改命名空间,打开左侧的Tables下拉栏,找到需要重建的表名
在右侧可以看到基本信息,找到上面的Action/rebuild indices即可建立I表

另外open table可以查看当前表的所有内容,在当前页的最下方可以调节显示数据的条数
==========================================================
Management portal简介:
除了上述的System Explorer/SQL外,常用的还有System Explorer/Globals用于导入导出数据和查看表格;System Operation进行配置;System Administration进行管理等
==========================================================
远程访问Ensemble:
首先关闭防火墙才能被其他服务器远程访问。
访问其他服务器时,首先进行配置。
左键右下角图标,Prefered Server/AddEdit…

Localhost这一行可以看到自己的Port/Web Server Port配置情况,点击Add添加其他服务器IP地址、端口和网络端口保存

再查看prefered server即可看到当前的首选服务器,在remote system access里可以打开任意可以远程到的服务器的studio/terminal/management portal/documentation
Caché数据库学习笔记(3)的更多相关文章
- Caché数据库学习笔记(1)
目录: Caché的概念和基础知识 Caché数据库的安装 创建命名空间(namespace)和数据库(database) Documentation的使用 ===================== ...
- Caché数据库学习笔记(5)
目录 Cache数据库方法的RESTful封装 ================================================================ 因为对web serv ...
- Caché数据库学习笔记(4)
目录 DeepSee的使用 数据.方法等的导入与导出 ======================================================== ================ ...
- Caché数据库学习笔记(2)
目录: 创建新类(表)(class文件)与创建routine(.mac .inc) 在类里面添加函数(classmethod) Terminal的使用 ======================= ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Mysql数据库学习笔记之数据库索引(index)
什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...
- MYSQL数据库学习笔记1
MYSQL数据库学习笔记1 数据库概念 关系数据库 常见数据库软件 SQL SQL的概念 SQL语言分类 数据库操作 创建数据库 查看数据库的定义 删除数据库 修改数据库 创建表 数据类型 约束 ...
随机推荐
- favicon.ico的制作
1.选取需要的图片(jpg的格式等) 2.在网上搜索favicon.ico的制作,将jpg转为ico 3.在html中输入<link rel="shortcut icon" ...
- Python开发程序:简单主机批量管理工具
题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ### 作者介绍: * au ...
- Linux下dns服务器搭建
Linux下dns服务器搭建1-环境Red Hat Enterprise Linux Server release 6.7 (Santiago)2-配置本地yum源安装dns相关包yum -y ins ...
- java netty之ServerBootstrap的启动
通过前面的几篇文章,对整个netty部分的架构已经运行原理都有了一定的了解,那么这篇文章来分析一个经常用到的类:ServerBootstrap,一般对于服务器端的编程它用到的都还算是比较的多..看一看 ...
- MVC控制器常用方法返回类型
控制器的常用方法 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...
- tomcat access log 参数
%a - 客户端IP地址 %A - 本机IP地址 %b - 发送字节数,不含HTTP头 如果为空是 '-' %B - 同上 %h - 客户端机器名 (如果connector的enableLookup ...
- EBS R12.2应用层关闭脚本的执行过程
$ pwd /app/oracle/apps/VIS/fs1/inst/apps/VIS_erptest/admin/scripts $ ./adstpall.sh apps/apps You are ...
- Java条件编译
学习过C语言或者C++语言的同学都知道它们支持条件编译,那么今天我们来学习下在Java语言中如何实现条件编译.Java语言本身没有提供条件编译,但是Java编译器对.java文件编译为.class文件 ...
- Dynamics AX 2012 R2 创建一个带有负载均衡的服务器集群
安装额外AOS的主要目的,是将它添加到集群,或用于创建批处理服务器. 1.创建集群服务器 这里,Reinhard使用上节Install An Additional AOS 中创建的AOS,来创建集群. ...
- caffe问题集锦
不断更新中... 1.问题:check failure stack trace:*** 解决方法:路径错误,重新去看自己的路径是否有错误 2.Check failed: error == cudaSu ...