Here’s how to use update() function.
Description:
Update database tables.
Syntax:
db.update(A:A',tbl,Fi:xi,…;P,…) |
Update a database table based on a sequence/record sequence |
db.update(cs,tbl,Fi:xi,…;P,…) |
Update a database table based on a cursor |
Note:
The function updates Fi field of the tbl table with the value of computing expression xi over the namesake field in sequence A. If both Fi and xi are omitted, use the namesake field of A and its values.
P,… is the key of table tbl. First compare the database table tbl with A', the original sequence, according to the primary key if the latter parameter exists and generate a delete command to delete database records that exist in A' but don’t exist in A. When a primary key value exists in A but doesn’t exist in A', insert the corresponding record in A into the database table. If the primary key value exists in both A and A', compare the database record and the records in A and A' to see if there’s any change between the value of computing expression xi over Fi field in sequence A and the original Fi field value; and update the database table with the new value, if there is any.
When parameter A' is absent, the function supports only the insert and update operattions; no delete operation exists.
Parameter:
db |
Database connection |
A |
A sequence /record sequence |
cs |
A cursor |
A' |
The original sequence/record sequence, whose data is considered consistent with the database table. |
tbl |
The name of a database table |
Fi |
A field in tbl |
xi |
An expression which will be computed based on A and its value will be the new value of Fi. |
P |
The key of tbl. If omitted, it will be retrieved from tbl; if the retrieval fails, then use A’s |
Option:
@u |
Compare primary keys between the database table and A' to generate an UPDATE statement; skip the comparison and directly upadate the database table with A if A' is absent. |
@i |
Compare primary keys between the database table with A'generate INSERT statement; skip the comparison and directly insert records into the database table with A if A' is absent. |
@a |
Clear the target table before the update is executed; empty the database table before executing db.update(A:A',tbl,Fi:xi,…;P,…). |
@k |
After the execution is completed, the transaction won't be committed. If this option is omitted, the transaction will be committed. |
@1 |
The first field is an auto-increment field with no corresponding expression. |
@d |
Only perform delete operation and A' must be in place. |
Return value:
None
Example:
Transaction commits automatically after the update is completed
|
A |
|
1 |
=demo.query("select * from EMPLOYEE").keys(EID) |
|
2 |
=file("D:/employee1.txt").import@t() |
|
3 |
>demo.update(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
EID is the key, which must be included in the update fields. A1 and A2 have the same field names. Compare the primary keys of the database table and those of A1 and A2 to delete records that are held by A1 but not held by A2; and to insert records that exist in A2 but don’t exist in A1. Finally compare the primary key values to upadate field values of A2’s database table by performing SALARY+10 on SALARY field of records whose field values have changed |
4 |
>demo.update@u(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
With @u option, upadate only the field values of the records in A2 by performing SALARY+10 on SALARY field of records whose field values have changed |
5 |
>demo.update@u(A2,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
Skip the comparison of primary key values and directly insert A2’s computed records to the database table if A' is absent |
6 |
>demo.update@i(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
With @i option, only insert field values into records and perform SALARY+10 on SALARY field of all records |
7 |
>demo.update@i(A2,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
Skip the comparison of primary key values and directly insert records into the database table with A if A' is absent |
8 |
>demo.update@a(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
First empty the database table EMPLOYEE before executing db.update(A:A',tbl,Fi:xi,…;P,…). Perform operation on records of the resulting database table whose EID is 512 |
9 |
=file("D:/data_user.txt").import@t() |
|
10 |
=mysql.query("select * from user_test").keys(userid) |
userid, which is the key of user test table in MySQL database, is a auto-incrementing field. |
11 |
>mysql.update@1(A9:A10,user_test,USERNAME) |
There’s no need for an auto-incrementing field to be written down as an expression |
12 |
>demo.update@k(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
Do not commit a transaction after the execution |
13 |
>demo.update@d(A2:A1,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
Compare key values to delete records that exist in A1 but don’t exist in A2; perform operation on records of the updated database table whose EID is 1, 2 and 3 |
14 |
=file("D://data.txt").cursor@t() |
|
15 |
>demo.update(A14,EMPLOYEE,EID,NAME,SURNAME,GENDER,STATE,BIRTHDAY,HIREDATE,DEPT,SALARY:SALARY+10;EID) |
A14 is a cursor |
Description:
Update records in an entity table.
Syntax:
T.update(P) |
Note:
The function updates entity table T’s records by matching keys in T and record sequence P; P and T should have same structure. If a key value in P doesn’t exist in T, append or insert the corresponding record in T.
Parameter:
T |
A composite table’s entity table |
P |
A table sequence/record sequence having same structure as T |
Option:
@i |
Only append or insert non-matching records and ignore the matching ones |
@u |
Only update the matching records and ignore the non-matching ones |
@n |
Return records that are updated and inserted |
@w |
When parameter P is a cursor having same order as the original entity table, update the latter’s fields that P has; only valid when T is stored in column-wise format and no records should be added |
An entity table
Example:
|
A |
|
1 |
=file("emp.ctx") |
Generate a composite table file |
2 |
=A1.create@y(#EID,NAME) |
Create the composite table’s base table |
3 |
=connect("demo").cursor("select EID,NAME from employee where EID<20") |
Return a cursor |
4 |
=A2.append@i(A3) |
Append data in A3’s cursor to A2’s base table |
5 |
=A2.attach(table3,SURNAME) |
Add attached table table3 that has two fields – EID, which is the key, and SURNAME, to the base table |
6 |
=connect("demo").cursor("select EID,SURNAME from employee where EID< 5") |
Return a cursor |
7 |
=A5.append@i(A6) |
Append data in A6’s cursor to A5’s pseudo table |
8 |
=A2.cursor().fetch() |
View data in the base table: |
9 |
=A5.cursor().fetch() |
View data in the attached table: |
10 |
=create(EID,NAME).record([1,"A",21,"B"]) |
Return a table sequence |
11 |
=A2.update(A10) |
Update the base table using A8’s table sequence |
12 |
=A2.cursor().fetch() |
View data in the base table again: |
13 |
=create(EID,SURNAME).record([2,"aa",10,"bb"]) |
Return a table sequence |
14 |
=A5.update@in(A13) |
With @i option, only handles insert and ignore records with same key values; the cooperation with @n option makes the function return only the inserted records |
15 |
=A5.cursor().fetch() |
View data in the attached table again: |
16 |
=create(EID,SURNAME).record([1,"ss",6,"cc"]) |
Return a table sequence |
17 |
=A5.update@un(A16) |
With @u option, only handles update and ignore records with different key values; the cooperation with @n option makes the function return only the updated records |
18 |
=A5.cursor().fetch() |
View data in the attached table: |
|
A |
|
1 |
=demo.cursor("select * from STOCKRECORDS where STOCKID = ? and DATE<?","000062","2015-01-20") |
|
2 |
=file("STOCKRECORDS.ctx") |
Create a composite table file |
3 |
=A2.create@y(#STOCKID,DATE,CLOSING) |
Create the composite table’s base table |
4 |
=A3.append@i(A1) |
Append data of A1’s cursor to the composite table’s base table |
5 |
=A2.open().cursor().fetch() |
Fetch data from the composite table as follows: |
6 |
=demo.cursor("select * from STOCKRECORDS where STOCKID = ?","000792") |
|
7 |
=A2.open() |
|
8 |
=A7.update@w(A6) |
Update content of A6’s cursor to composite table STOCKRECORD.ctx, during which @w option is used to rewrite fields that A6 has but do not add new content |
9 |
=A7.cursor().fetch() |
Fetch data from the updated composite table file as follows: |
Description:
Update records in a pseudo table.
Syntax:
T.update(P) |
|
Note:
The function updates pseudo table T’s records by matching both T and record sequence P’s key values; P and T should have same structure. If a key value in P doesn’t exist in T, append or insert the corresponding record in T.
Parameter:
T |
A pseudo table object |
P |
A table sequence/record sequence having same structure as T |
Option:
@i |
Only append or insert non-matching records and ignore the matching ones |
@u |
Only update the matching records and ignore the non-matching ones |
@n |
Return records that are updated and inserted |
Return value:
A pseudo table object
Example:
|
A |
|
1 |
=create(file).record(["D:/file/pseudo/Employee.ctx"])
|
|
2 |
=pseudo(A1)
|
Generate a pseudo table object |
3 |
=create(Dept,AvgSalary).record(["HR",7000,"CSD",6018.04]) |
Return a table sequence |
4 |
=A2.update(A3) |
Use 3’s pseudo table to update A2’s pseudo table by matching their key values |
5 |
=A4.import() |
|