T.update( P:D )

阅读(1122) 标签: 更新, 记录,

描述:

更新实表的记录。

语法:

T.update(P:D)

备注:

根据排列PD更新实表T的记录,保证P的结构和实表T结构一致;

P的键值在实表T中存在则更新该条记录,P的键值在T中不存在,则将此记录追加或插入到T中。

D的键值在T中存在则删除该条记录,参数D可以省略。

实表T没有维时忽略D,此时P中数据全部追加到T的末尾。

参数:

T

组表的实表。

P

要更新的内容,和T同构的排列/序表,可省略。

D

根据D的键值删除T的记录,可省略。

选项:

@i

只处理插入,键值能找到的忽略。

@u

只处理更新,键值找不到的忽略。

@n

返回更新/插入/删除的记录。

@w

P是游标与原表同序,重写P涉及的字段,该选项仅支持T列存格式时使用,不可增加记录。

@y

保持在内存,在计算时归并,不写入外存。

返回值:

实表

示例:

更新实表数据:

 

A

 

1

=file("emp.ctx")

生成组表文件。

2

=A1.create@y(#EID,NAME)

创建组表的基表。

3

=connect("demo").cursor("select EID,NAME from employee where EID<20")

返回游标。

4

=A2.append@i(A3)

A3游标中的数据追加到组表的基表中。

5

=A2.attach(table3,SURNAME)

在基表上增加名为table3的附表,EID为键,SURNAME为字段。

6

=connect("demo").cursor("select EID,SURNAME from employee where EID< 5")

返回游标。

7

=A5.append@i(A6)

A6游标中的数据追加到附表table3中。

8

=A2.cursor().fetch()

查看基表中的数据。

9

=A5.cursor().fetch()

查看附表中的数据:

10

=create(EID,NAME).record([1,"A",21,"B"])

返回序表。

11

=A2.update(A10)

根据A8序表更新基表中的数据,A10序表键值在基表中存在时更新记录,键值不存在时追加记录。

12

=A2.cursor().fetch()

此时查看基表中的数据:

13

=create(EID,SURNAME).record([2,"aa",10,"bb"])

返回序表。

14

=A5.update@in(A13)

使用@i选项,只处理插入,相同键值的忽略,组合使用@n选项,返回插入的记录:

15

=A5.cursor().fetch()

此时查看附表中的数据:

16

=create(EID,SURNAME).record([1,"ss",6,"cc"])

返回序表。

17

=A5.update@un(A16)

使用@u选项,只处理更新,键值不同的忽略,组合使用@n选项,返回更新的记录:

18

=A5.cursor().fetch()

此时查看附表中的数据:

    删除实表数据: 

 

A

 

1

=file("empD.ctx")

 

2

=A1.create@y(#EID,NAME)

创建EID为键的组表。

3

=connect("demo").cursor("select top 10 EID,NAME from employee")

返回游标,其中数据内容如下:

4

=A2.append@i(A3)

A3游标中的数据追加到实表A2中。

5

=create(EID,NAME).record([10,"bb",11,"cc"])

生成序表:

6

=create(EID,NAME).record([1,"Rebecca"])

生成序表:

7

=A2.update@n(A5:A6)

更新实表A2A5的键值在实表A2中存在时更新否则插入,A6的键值在A2中存在时删除,使用@n选项,返回更新和插入及删除的记录:

8

=A2.import()

此时读取实表A2的数据如下:

实表没有维的情况: 

 

A

 

1

=file("empD.ctx")

 

2

=A1.create@y(EID,NAME)

创建组表。

3

=connect("demo").cursor("select top 10 EID,NAME from employee")

返回游标,其中数据内容如下:

4

=A2.append@i(A3)

A3游标中的数据追加到实表A2中。

5

=create(EID,NAME).record([10,"bb"])

生成序表:

6

=create(EID,NAME).record([1,"Rebecca"])

生成序表:

7

=A2.update(A5:A6)

实表A2无维,所以更新时忽略参数D,并且将P中的所有记录追加进实表,所以此处将A5的记录全部追加进实表,忽略此处的参数A6

8

=A2.import()

此时读取实表A2的数据如下:

使用@y选项:

 

A

 

1

=file("empD.ctx")

 

2

=A1.create@y(#EID,NAME)

创建组表。

3

=connect("demo").cursor("select top 10 EID,NAME from employee")

返回游标,其中数据内容如下:

4

=A2.append@i(A3)

A3游标中的数据追加到实表A2中。

5

=create(EID,NAME).record([1,"Rebecca"])

生成序表:

6

=A2.update@y(:A5)

更新实表A2A5的键值在A2中存在时删除,使用@y选项,更新保存在内存中,计算时才归并。

7

=A2.import()

此时查看实表内容:

8

=A2.close()

关闭实表。

9

=A1.open().import@x()

重新打开实表,读取实表中的数据,可以看到A6中的更新内容已经被还原:

使用@w选项:

 

A

 

1

=demo.cursor("select STOCKID,DATE,CLOSING from STOCKRECORDS  where STOCKID = ? and DATE<?","000062","2015-01-20")

 

2

=file("STOCKRECORDS.ctx")

创建组表文件。

3

=A2.create@y(#STOCKID,DATE,CLOSING)

创建组表的基表。

4

=A3.append@i(A1)

A1游标中的数据追加到组表基表中。

5

=A2.open().cursor@x().fetch()

读取组表数据内容:

6

=demo.cursor("select STOCKID,DATE  from STOCKRECORDS  where STOCKID = ?","000792")

 

7

=A2.open()

 

8

=A7.update@w(A6)

将游标A6的内容更新到组表STOCKRECORDS.ctx中,使用@w选项,重写A6涉及的字段,即:将A6中的STOCKID,DATE字段更新到组表A7中,A7中的CLOSING字段内容保持不变,并且更新时不增加新的记录 ,保持组表A7原有的记录条数。

9

=A7.cursor@x().fetch()

读取更新后的组表文件数据内容: