========================================================================
TRANSFER COLUMN VALUES BETWEEN TABLES (POSTING) - THE EASY WAY
========================================================================
PRODUCT : R:BASE VERSION : 3.1 or Higher
CATEGORY : PROGRAMMING SUBCATEGORY : UPDATE
========================================================================
You don't need to program or understand the intricacies of DECLARE CURSOR
to create dynamic R:BASE programs that transfer (post) column values from
one table to another. Output from the SELECT command creates a command
file of UPDATE commands, each of which operates on one row.
You can precede a column name in a SELECT command with a text string
constant enclosed in quotation marks. R:BASE displays that literal text
string as well as the column value. You can do this for multiple columns,
separating each item in the SELECT list with commas.
To post values from one table to another, use the SELECT command to create
a series of UPDATE commands by combining text strings with column values.
The basic structure of this SELECT command is as follows:
SELECT 'UPDATE t2 SET t2col2 ='=w,+
t1col2, 'WHERE t2col1 ='=w,t1col1 FROM t1
You select the data values from one table along with the text string
constants that will create UPDATE commands for the second table,
including a condition to link the two tables when doing the update.
In the above command, t1 and t1col2 are the source table and column;
t2 and t2col2 are the target table and column; t1col1 and t2col2 are
used to link the tables so that matching rows are updated. Note the
quotation marks around the text string constants that will become the
UPDATE command and WHERE clause.
Use the SET HEADINGS OFF command to suppress the column heading, and use
the =w option to specify the display width of the text strings. Count the
number of characters in the text string to find the width.
The output from the command looks like this:
UPDATE t2 SET t2col2= t1c2value1 WHERE t2col1 = t1c1value1
UPDATE t2 SET t2col2= t1c2value2 WHERE t2col1 = t1c1value2
UPDATE t2 SET t2col2= t1c2value3 WHERE t2col1 = t1c1value3
UPDATE t2 SET t2col2= t1c2value4 WHERE t2col1 = t1c1value4
.
.
.
By sending the output of the SELECT to a file, you create a dynamic file
of update commands that you run to post the data from one table to
another. When you are done, you'll have a record of the updates stored
in the output file.
Here's an example using the CONCOMP database:
OUTPUT updtrans.rmd
SET HEADINGS OFF
SELECT 'UPDATE transmaster SET netamount ='=34, SUM(extprice), +
'WHERE transid ='=15, transid FROM transdetail GROUP BY transid
SET HEADINGS ON
OUTPUT SCREEN
RUN updtrans.rmd
The UPDTRANS.RMD file contains the following UPDATE commands,
which will post the totals from the TRANSDETAIL table to the
TRANSMASTER table:
UPDATE transmaster SET netamount= $27,000.00 WHERE transid= 4760
UPDATE transmaster SET netamount= $9,500.00 WHERE transid= 4780
UPDATE transmaster SET netamount= $76,800.00 WHERE transid= 4790
UPDATE transmaster SET netamount= $176,000.00 WHERE transid= 4795
UPDATE transmaster SET netamount= $100,250.00 WHERE transid= 4800
UPDATE transmaster SET netamount= $9,125.00 WHERE transid= 4865
UPDATE transmaster SET netamount= -$5,250.00 WHERE transid= 4970
UPDATE transmaster SET netamount= $87,500.00 WHERE transid= 4975
UPDATE transmaster SET netamount= $22,500.00 WHERE transid= 4980
UPDATE transmaster SET netamount= $40,500.00 WHERE transid= 5000
UPDATE transmaster SET netamount= $108,750.00 WHERE transid= 5010
UPDATE transmaster SET netamount= $80,500.00 WHERE transid= 5015
UPDATE transmaster SET netamount= $56,250.00 WHERE transid= 5050
UPDATE transmaster SET netamount= $57,500.00 WHERE transid= 5060
UPDATE transmaster SET netamount= $140,300.00 WHERE transid= 5065
UPDATE transmaster SET netamount= $95,500.00 WHERE transid= 5070
UPDATE transmaster SET netamount= $155,500.00 WHERE transid= 5075
UPDATE transmaster SET netamount= $88,000.00 WHERE transid= 5080
UPDATE transmaster SET netamount= $130,500.00 WHERE transid= 5085