Home Joe Curran. Software Guy.

SQLite Script to import CSV files.

Save the script below as vo_sql.sql in the same folder where the CSV files are stored.

To run it, at the command prompt type:

sqlite3 joe

This will start SQLite, open or create joe.db and set the cursor at the SQLite command prompt.

. read vo_sql.sql (starts this script)

This script creates two SQLite tables: MASTER and TRANS_HIST from master.csv and trans_hist.csv, created from the DBF files.

Obviously the record layout of each CSV file must match the record layout of each CREATE statement

COLLATE NOCASE is a useful clause -- with it, there's no need to be concerned about Upper( ) when you're sorting or seeking. Each field created with this clause will be case-insensitive.

The "primary key" constraint is a UNIQUE constraint. In the case of the Master file, the FANO (client number) field is unique. In the transaction file, the FQ (unique ID) field is unique.

Indexes affect performance but presumably those issues have been worked out in the DBF system. The syntax is similar. Use the same index scheme and don't worry about performance-tuning yet.

Zero-value numeric fields are updated with zeros. This helps eliminate NULL errors.


.print "creating tables"

CREATE TABLE MASTER
(FKEY VARCHAR(1),
FANO NUMERIC(7, 0) PRIMARY KEY,
FLOOKUP VARCHAR(50) COLLATE NOCASE,
FPREF VARCHAR(20) COLLATE NOCASE,
FLAST VARCHAR(20) COLLATE NOCASE,
FFIRST VARCHAR(20) COLLATE NOCASE,
FMIDDLE VARCHAR(20) COLLATE NOCASE,
FSUFF VARCHAR(15) COLLATE NOCASE,
FTITLE VARCHAR(50),
FCOMPANY VARCHAR(70) COLLATE NOCASE,
FADDR1 VARCHAR(34) COLLATE NOCASE,
FADDR2 VARCHAR(34),
FCITY VARCHAR(22) COLLATE NOCASE,
FSTATE VARCHAR(2),
FZIP VARCHAR(10),
FQ VARCHAR(11),
FDT VARCHAR(13) );


CREATE TABLE TRANS_HIST
( OANO NUMERIC(7, 0),
OCODE CHAR(10) COLLATE NOCASE,
ODESC VARCHAR(60),
OCAT VARCHAR(5),
OPROG VARCHAR(10),
OTYPE VARCHAR(2),
ODATE CHAR(8),
ODUE CHAR(8),
OPGYR VARCHAR(5),
OCCI CHAR(1),
OAMT NUMERIC(12, 2),
ODR VARCHAR(10),
OCR VARCHAR(10),
OCOMMNT VARCHAR(50),
OCHECK NUMERIC(6, 0),
OTRANS NUMERIC(7, 0),
OTRANS2 VARCHAR(4),
OTRANS3 VARCHAR(4),
OBACKREF NUMERIC(7, 0),
OPLG VARCHAR(8),
OCHILD CHAR(1),
OCHTYPE VARCHAR(2),
OANO2 NUMERIC(7, 0),
OLOG VARCHAR(15),
FBRANCH NUMERIC(3, 0),
FQ VARCHAR(11) PRIMARY KEY,
FDT VARCHAR(13),
FOREIGN KEY(OANO) REFERENCES MASTER(FANO) );

.print "IMPORTING"
.import TRANS_HIST.CSV TRANS_HIST
.import MASTER.CSV MASTER

BEGIN TRANSACTION;
.print "REPLACING NULLS"
-- fill in the null numeric values
UPDATE TRANS_HIST SET OANO =0 WHERE OANO = "";
UPDATE TRANS_HIST SET OAMT =0 WHERE OAMT = "";
UPDATE TRANS_HIST SET OCHECK =0 WHERE OCHECK = "";
UPDATE TRANS_HIST SET OTRANS =0 WHERE OTRANS = "";
UPDATE TRANS_HIST SET OBACKREF =0 WHERE OBACKREF = "";
UPDATE TRANS_HIST SET OANO2 =0 WHERE OANO2 = "";
UPDATE TRANS_HIST SET FBRANCH =0 WHERE FBRANCH = "";

UPDATE master SET FANO =0 WHERE FANO = "";



.print "INDEXING"
-- create the indexes
CREATE INDEX MAS_FILE ON master( FANO );
CREATE INDEX MAS_NAME ON master( FLOOKUP );
CREATE INDEX MAS_KEYFILE ON master( FKEY, FANO );
CREATE INDEX MAS_KEYNAME ON master( FKEY, FLOOKUP );

CREATE INDEX TRANS_FILE ON TRANS_HIST(OANO, ODATE);
CREATE INDEX TRANS_CODE ON TRANS_HIST(OCODE, ODATE, OTRANS, OCHILD);
CREATE INDEX TRANS_DATE ON TRANS_HIST(ODATE, OANO, OTRANS, OCHILD);
CREATE INDEX TRANS_TRANS ON TRANS_HIST(OTRANS, OCHILD);
CREATE INDEX TRANS_CHECK ON TRANS_HIST(OCR, OCHECK);
CREATE INDEX TRANS_TYPE ON TRANS_HIST(OTYPE, ODATE);
CREATE INDEX TRANS_BACKREF ON TRANS_HIST(OBACKREF);

-- show the master file count
select count(*) from master as mascount;
.print mascount

END TRANSACTION;


-- type .quit to exit SQLite