本章介绍memory()函数的多种用法。
描述:
用游标生成内表。
语法:
cs.memory(K,…)
用游标cs生成键为K的内表,参数K省略时,内表将继承游标的键。
参数:
K |
键。 |
cs |
游标。 |
选项:
@p |
用第一字段作分段,要求cs对第一个字段有序。 |
@v |
使用该选项时,cs中数据内容必须为纯序表,结果返回列式内表。 |
@x |
生成内表后自动关闭游标。 |
返回值:
内表/列式内表
示例:
|
A |
|
1 |
=demo.cursor("select EID,NAME,GENDER,SALARY from EMPLOYEE where EID<10") |
返回取数游标。 |
2 |
=A1.memory(EID) |
返回键为EID的内表: |
|
A |
|
1 |
=connect("demo").query("select EID,NAME,GENDER,SALARY from employee").sort(EID ) |
返回对EID有序的序表。 |
2 |
=A1.cursor() |
返回游标 。 |
3 |
=A2.memory@p(EID) |
用A2游标生成内表,根据第一个字段EID分段。 |
生成列式内表:
|
A |
|
1 |
=to(1000).new(~:ID,~*~:pNum) |
生成序表,结构如下: |
2 |
=A1.cursor() |
生成游标,游标中数据内容为纯序表。 |
3 |
=A2.memory@v() |
使用@v选项,生成列式内表。 |
描述:
用集群游标生成集群内表。
语法:
cs.memory(K,…)
备注:
用集群游标cs生成与cs相同分布且键为K的集群内表。cs为集群多路游标时,多路按次序加载。
参数:
K |
键,可省略。 |
cs |
集群游标。 |
返回值:
集群内表
示例:
|
A |
|
1 |
=file("test0.ctx","169.254.121.62:8281") |
打开集群文件。 |
2 |
=A1.open() |
打开集群组表。 |
3 |
=A2.attach(table) |
取出集群附表table。 |
4 |
=A3.cursor(NAME,GENDER;EID<6) |
筛选集群附表table中EID<6的NAME,GENDER列后返回成游标。 |
5 |
=A4.memory(GENDER) |
集群游标生成键为GENDER的集群内表。 |
描述:
使用本地内表拼出集群内表。
语法:
memory(h,V)
备注:
用分机序列h上的本地内表V拼成集群内表,用全局变量代替分机中的内表。
参数:
h |
分机序列。 |
V |
内表全局变量。 |
返回值:
集群内表
假设在初始化脚本init.splx中,已通过env(v, data)给全局变量arg1赋值:
|
A |
|
1 |
=memory(["192.168.31.72:8281","192.168.31.72:8291"],arg1) |
本地内表arg1拼出集群内表。 |
2 |
=A1.cursor().fetch() |
|
描述:
将序表转换为内表。
语法:
T.memory()
将序表T转换为内表,若序表T为纯序表,则保持表的纯性。
参数:
T |
序表/纯序表,如果有键和索引,将被继承。 |
选项:
@o |
直接使用原序表的记录,原序表数据变动时,返回的内表数据跟随变动;缺省为将原序表的数据复制并转换,原数据变动时,内表数据不变。 |
返回值:
内表
示例:
|
A |
|
1 |
=demo.query("select EID,NAME,GENDER,SALARY from employee where EID <= 30") |
|
2 |
=A1.keys(EID) |
设置A1的键为EID。 |
3 |
=A1.memory() |
将序表A1转换为内表,键被继承。 |
4 |
=A1.memory@o() |
|
5 |
=A1.insert(0) |
在原序表末尾追加一条空记录。 查看A2末尾不显示空记录,A3末尾显示空记录。 |
6 |
=demo.query@v("select * from DEPT") |
返回纯序表。 |
7 |
=A6.memory() |
将A6纯序表转换成内表,并且保持表的纯性。 |
描述:
用实表生成内表。
语法:
T.memory(C,…;w)
将实表T中的数据根据过滤条件w过滤之后,读入内存中生成列为C的内表,内表可像序表一样使用。当省略C列不省略过滤条件w时,w前面的分号不可省略。实表中如果C列带#,则生成内表后C列作为T的键。C在T中不存在则填null。内表未设置键时可继承实表的键。
参数:
C |
列名,可省略,缺省读入全部列。 |
w |
过滤条件,缺省不过滤。 |
T |
组表的实表。 |
选项:
@p |
用第一字段作分段,要求T对第一个字段有序;当T有分段且参数C中包含T的第一个字段时,内表将继承组表T的分段属性。 |
@v |
使用该选项时,表T必须为纯序表,结果返回列式内表。 |
@x |
生成内表 自动关闭T。 |
@w |
用于复组表。 按更新机制归并,分表间存在相同键值时,忽略分表号较小的分表中的记录。分段要以第1分表为准,后面有些分表可能非常小可先全读。 |
返回值:
示例:
|
A |
|
1 |
=file("D:\\ employees.ctx") |
employees为已存在的组表文件。 |
2 |
=A1.open() |
打开组表。 |
3 |
=A2.attach(t1) |
返回组表上已存在的附表t1。 |
4 |
=A2.memory() |
用基表全部列生成内表: |
5 |
=A2.memory(EID,Dept,Name;EID<5) |
取基表的部分列并筛选出EID<5的数据生成内表: |
6 |
=A3.memory() |
取附表全部列生成内表: |
|
A |
|
1 |
=connect("demo").cursor("select EID,NAME,GENDER,SALARY from employee").sortx(EID ) |
返回游标,游标中数据对EID有序。 |
2 |
=file("emp.ctx") |
生成组表文件。 |
3 |
=A2.create@yp(#EID,NAME,GENDER,SALARY) |
创建组表的基表,并且将第一个字段作为分段键。 |
4 |
=A3.append@i(A1) |
将游标中的数据追加到基表中。 |
5 |
=A2.open() |
打开组表文件。 |
6 |
=A5.memory@p(EID,NAME) |
用实表A5生成内表,使用@p选项,将第一个字段作为分段键,组表T有分段且A6的读取的字段中包含第一个字段EID,所以内表会继承组表A5的分段属性。 |
生成列式内表:
|
A |
|
1 |
=to(1000).new(~:ID,~*~:pNum).cursor() |
返回游标,游标中的数据为纯序表,表结构如下: |
2 |
=file("tb1.ctx") |
生成组表文件。 |
3 |
=A2.create@y(#ID,pNum) |
创建组表的基表。 |
4 |
=A3.append@i(A1) |
将游标中的数据追加到基表中。 |
5 |
=A4.memory@v() |
使用@v选项,结果返回列式内表。 |
用复组表生成内表:
T.memory(C,…;w)
用集群实表T生成集群内表,继承分表表达式,T必须有维,用来记录分段界值便于寻找;退出时同时清除分机上的内存,超时自动清除。
参数:
C |
列名,可省略,省略读入全部列。 |
w |
过滤条件,缺省不过滤。 |
T |
有维的集群组表的实表。 |
返回值:
集群内表对象
示例:
|
A |
|
1 |
=file("emp1.ctx",["192.168.0.116:8281","192.168.0.129:8281"]) |
打开集群文件。 |
2 |
=A1.open() |
产生集群组表。 |
3 |
=A2.attach(t1) |
取出集群附表t1。 |
4 |
=A3.memory(NAME,GENDER;EID<5) |
通过表t1生成列为NAME,GENDER的集群内表,筛选条件为EID<5。 |