<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=DumpSqlLdr</id>
	<title>DumpSqlLdr - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=DumpSqlLdr"/>
	<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=DumpSqlLdr&amp;action=history"/>
	<updated>2026-04-28T22:15:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://pickwiki.org/index.php?title=DumpSqlLdr&amp;diff=1691&amp;oldid=prev</id>
		<title>Conversion script: link fix</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=DumpSqlLdr&amp;diff=1691&amp;oldid=prev"/>
		<updated>2015-02-26T23:48:54Z</updated>

		<summary type="html">&lt;p&gt;link fix&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;[[BasicSource]]&lt;br /&gt;
&lt;br /&gt;
A program to extract data from [[UniData]], to flat files in a format suitable for import into Oracle, using sqlldr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
***************************************************************************&lt;br /&gt;
* Program: TRIN.DUMP.SQLLDR&lt;br /&gt;
* Author : Ian [[McG]]&lt;br /&gt;
* Date   : 12/13/1999&lt;br /&gt;
* Edited : 09:52:19 Oct 22 2002 By MGC     &lt;br /&gt;
* Comment: Dump a recall  in sql*loader format for transfer to oracle&lt;br /&gt;
***************************************************************************&lt;br /&gt;
* Date       By   Desc&lt;br /&gt;
* ---------- ---- ---------------------------------------------------------&lt;br /&gt;
* 01/18/2000 Ian  Run sqlldr after making dump file, delete dmp&lt;br /&gt;
* 01/21/2000 Ian  Send right date format&lt;br /&gt;
* 02/28/2000 Ian  Email log file to dump user when done&lt;br /&gt;
* 07/15/2000 Ian  Check for specific ORACLE.FIELD.SIZE&lt;br /&gt;
* 07/15/2000 Ian  Do not send &amp;lt; or &amp;gt; chars&lt;br /&gt;
* 03/20/2001 Ian  Set oracle_sid based on account&lt;br /&gt;
&lt;br /&gt;
* Sample of dump format&lt;br /&gt;
*LOAD DATA&lt;br /&gt;
*INFILE *&lt;br /&gt;
*INTO TABLE dept&lt;br /&gt;
*REPLACE&lt;br /&gt;
*FIELDS TERMINATED BY &amp;#039;|&amp;#039;&lt;br /&gt;
*(deptno,dname,loc)&lt;br /&gt;
*BEGINDATA&lt;br /&gt;
*10|ACCOUNTING|NEW YORK&lt;br /&gt;
*20|RESEARCH|DALLAS&lt;br /&gt;
*30|SALES|RESTON&lt;br /&gt;
&lt;br /&gt;
OPEN &amp;#039;RECALLS&amp;#039; TO RECALLS ELSE STOP 201,&amp;#039;RECALLS&amp;#039;&lt;br /&gt;
OPEN &amp;#039;TRIN.SQLLDR.DATA&amp;#039; TO TRIN.SQLLDR.DATA ELSE STOP 201,&amp;#039;TRIN.SQLLDR.DATA&amp;#039;&lt;br /&gt;
PROMPT &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
S=@SENTENCE&lt;br /&gt;
RECALL.NAME=FIELD(S, &amp;#039; &amp;#039;, 2)&lt;br /&gt;
IF RECALL.NAME = &amp;#039;&amp;#039; THEN&lt;br /&gt;
   PRINT @(-1):&amp;#039;ENTER RECALL NAME: &amp;#039;:&lt;br /&gt;
   INPUT RECALL.NAME&lt;br /&gt;
   IF RECALL.NAME = &amp;#039;&amp;#039; OR RECALL.NAME = &amp;#039;/&amp;#039; THEN STOP&lt;br /&gt;
END&lt;br /&gt;
READ RECALL FROM RECALLS, RECALL.NAME ELSE STOP &amp;#039;CANNOT READ RECALLS &amp;#039;:RECALL.NAME&lt;br /&gt;
READ SQLREC FROM TRIN.SQLLDR.DATA, RECALL.NAME ELSE&lt;br /&gt;
   STOP &amp;#039;CANNOT READ TRIN.SQLLDR.DATA &amp;#039;:RECALL.NAME&lt;br /&gt;
END&lt;br /&gt;
ORACLE.TABLE.NAME=SQLREC&amp;lt;1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See if there&amp;#039;s a select or get-list statement&lt;br /&gt;
GOSUB FIND.SELECT.LINE&lt;br /&gt;
&lt;br /&gt;
* Get rid of the select line and other stuff&lt;br /&gt;
RECALL=RECALL&amp;lt;1&amp;gt;&lt;br /&gt;
DEL RECALL&amp;lt;1,1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OUTFILE.BASE=&amp;quot;/samba_share/recall_dump/&amp;quot;:RECALL.NAME:&amp;quot;_&amp;quot;:OCONV(TIME(),&amp;quot;MT&amp;quot;)&lt;br /&gt;
CONVERT &amp;quot;:&amp;quot; TO &amp;quot;&amp;quot; IN OUTFILE.BASE&lt;br /&gt;
OUTFILE=OUTFILE.BASE:&amp;quot;.DMP&amp;quot;&lt;br /&gt;
EXECUTE &amp;quot;!rm &amp;quot;:OUTFILE&lt;br /&gt;
EXECUTE &amp;quot;!touch &amp;quot;:OUTFILE&lt;br /&gt;
OPENSEQ OUTFILE TO OUTFILE.F ELSE STOP 201,OUTFILE&lt;br /&gt;
BAD=OUTFILE.BASE:&amp;#039;.DMP.bad&amp;#039;&lt;br /&gt;
EXECUTE &amp;quot;!rm &amp;quot;:BAD&lt;br /&gt;
&lt;br /&gt;
IF SELECT.LINE = &amp;#039;&amp;#039; THEN STOP &amp;#039;MUST HAVE A SELECT LIST &amp;#039;&lt;br /&gt;
PRINT SELECT.LINE&lt;br /&gt;
EXECUTE SELECT.LINE&lt;br /&gt;
&lt;br /&gt;
GOSUB PARSE.ATB.NAMES&lt;br /&gt;
&lt;br /&gt;
OUTREC=\LOAD DATA\ ; GOSUB ADD.ROW&lt;br /&gt;
OUTREC=\INFILE *\ ; GOSUB ADD.ROW&lt;br /&gt;
OUTREC=\INTO TABLE \:ORACLE.TABLE.NAME&lt;br /&gt;
GOSUB ADD.ROW&lt;br /&gt;
OUTREC=\REPLACE\ ; GOSUB ADD.ROW&lt;br /&gt;
OUTREC=\FIELDS TERMINATED BY &amp;#039;|&amp;#039;\ ; GOSUB ADD.ROW&lt;br /&gt;
OUTREC=\(\ ; GOSUB ADD.ROW&lt;br /&gt;
FOR COL=1 TO NUM.FLDS&lt;br /&gt;
   IF COL=1 THEN&lt;br /&gt;
     OUTREC=FLD.LIST&amp;lt;6,COL&amp;gt;&lt;br /&gt;
   END ELSE &lt;br /&gt;
     OUTREC=\,\:FLD.LIST&amp;lt;6,COL&amp;gt;&lt;br /&gt;
   END&lt;br /&gt;
   IF FLD.LIST&amp;lt;2,COL&amp;gt;[1,1]=&amp;#039;D&amp;#039; THEN&lt;br /&gt;
      * Dates need format specified&lt;br /&gt;
      OUTREC:=\ DATE &amp;quot;MM[[/DD/YYYY]]&amp;quot;\&lt;br /&gt;
   END ELSE&lt;br /&gt;
      IF FLD.LIST&amp;lt;7,COL&amp;gt; &amp;lt;&amp;gt; &amp;quot;&amp;quot; THEN OUTREC:=\ char(\:FLD.LIST&amp;lt;7,COL&amp;gt;:\)\&lt;br /&gt;
   END&lt;br /&gt;
   GOSUB ADD.ROW&lt;br /&gt;
NEXT COL&lt;br /&gt;
&lt;br /&gt;
OUTREC=\)\ ; GOSUB ADD.ROW&lt;br /&gt;
&lt;br /&gt;
* Now do the actual data records&lt;br /&gt;
OUTREC=\BEGINDATA\ ; GOSUB ADD.ROW&lt;br /&gt;
&lt;br /&gt;
LOOP&lt;br /&gt;
   READNEXT @ID ELSE EXIT&lt;br /&gt;
   *PRINT @ID&lt;br /&gt;
   READ @RECORD FROM INFILE.F, @ID ELSE STOP &amp;#039;CANNOT READ &amp;#039;:@ID&lt;br /&gt;
   TEMP.REC=&amp;#039;&amp;#039;&lt;br /&gt;
   FOR COL=1 TO NUM.FLDS&lt;br /&gt;
      FLD.NAME=FLD.LIST&amp;lt;1,COL&amp;gt;&lt;br /&gt;
      CNV=FLD.LIST&amp;lt;2,COL&amp;gt;&lt;br /&gt;
      TYP=FLD.LIST&amp;lt;3,COL&amp;gt;&lt;br /&gt;
      ATB=FLD.LIST&amp;lt;4,COL&amp;gt;&lt;br /&gt;
      WID=FLD.LIST&amp;lt;5,COL&amp;gt;&lt;br /&gt;
      IF TYP=&amp;#039;D&amp;#039; THEN&lt;br /&gt;
         IF ATB = 0 THEN VALUE=@ID ELSE VALUE=@RECORD&amp;lt;ATB&amp;gt;&lt;br /&gt;
      END ELSE&lt;br /&gt;
         VALUE=CALCULATE(FLD.NAME)&lt;br /&gt;
      END&lt;br /&gt;
      CONVERT &amp;quot;,&amp;quot; TO &amp;quot;&amp;quot; IN CNV&lt;br /&gt;
      IF CNV # &amp;#039;*&amp;#039; THEN VALUE=OCONV(VALUE,CNV)&lt;br /&gt;
      IF INDEX(VALUE,@VM,1) THEN&lt;br /&gt;
         * Oh-oh, multivalued&lt;br /&gt;
         CONVERT @VM TO &amp;quot; &amp;quot; IN VALUE&lt;br /&gt;
      END&lt;br /&gt;
      CONVERT \|\ TO \,\ IN VALUE&lt;br /&gt;
      CONVERT \&amp;#039;\ TO \@\ IN VALUE&lt;br /&gt;
      CONVERT \&amp;amp;\ TO \+\ IN VALUE&lt;br /&gt;
      CONVERT \~\ TO \\ IN VALUE&lt;br /&gt;
      CONVERT \&amp;lt;\ TO \[\ IN VALUE&lt;br /&gt;
      CONVERT \&amp;gt;\ TO \]\ IN VALUE&lt;br /&gt;
      TEMP.REC:=TRIM(VALUE):&amp;quot;|&amp;quot;&lt;br /&gt;
   NEXT F&lt;br /&gt;
   * Get rid of trailing delimiter&lt;br /&gt;
   OUTREC=TEMP.REC[1,LEN(TEMP.REC)-1]&lt;br /&gt;
   GOSUB ADD.ROW&lt;br /&gt;
REPEAT&lt;br /&gt;
&lt;br /&gt;
CLOSESEQ OUTFILE.F&lt;br /&gt;
* Okey dokeley, now to lod the file in with sqlldr&lt;br /&gt;
CALL TRIN.GET.ACCOUNT(ACCOUNT)&lt;br /&gt;
BEGIN CASE&lt;br /&gt;
   CASE ACCOUNT=&amp;#039;TRINITY&amp;#039;&lt;br /&gt;
      PWD=&amp;#039;******&amp;#039;&lt;br /&gt;
      SCHEMA=&amp;#039;system1@sunrise&amp;#039;&lt;br /&gt;
   CASE ACCOUNT=&amp;#039;STEELCASE&amp;#039;&lt;br /&gt;
      PWD=&amp;#039;******&amp;#039;&lt;br /&gt;
      SCHEMA=&amp;#039;system2@sunrise&amp;#039;&lt;br /&gt;
   CASE 1&lt;br /&gt;
      PRINT &amp;#039;Cannot set [[ORACLE_SID]] - this program must be run&amp;#039;&lt;br /&gt;
      PRINT &amp;#039; from TRINITY or STEELCASE account&amp;#039;&lt;br /&gt;
      STOP&lt;br /&gt;
END CASE&lt;br /&gt;
&lt;br /&gt;
EXECUTE &amp;quot;!/usr/local/bin/dump_sqlldr &amp;quot;:SCHEMA:&amp;quot; &amp;quot;:PWD:&amp;quot; &amp;quot;:OUTFILE&lt;br /&gt;
*EXECUTE &amp;quot;!rm &amp;quot;:OUTFILE&lt;br /&gt;
&lt;br /&gt;
* Mail the log file to the calling user&lt;br /&gt;
RECIP=@LOGNAME&lt;br /&gt;
FRM=@LOGNAME&lt;br /&gt;
SOURCE=OUTFILE.BASE:&amp;#039;.DMP.log&amp;#039;&lt;br /&gt;
PRINT &amp;quot;SOURCE: &amp;quot;:SOURCE&lt;br /&gt;
SUBJECT=&amp;#039;SQLLDR log file&amp;#039;&lt;br /&gt;
OPTIONS=&amp;#039;PATH&amp;#039;&lt;br /&gt;
OPTIONS&amp;lt;2&amp;gt;=&amp;#039;UU&amp;#039;&lt;br /&gt;
*CALL TRIN.MAIL.SUB(RECIP, FRM, SOURCE, SUBJECT, OPTIONS)&lt;br /&gt;
SUBJECT=&amp;#039;SQLLDR errors&amp;#039;&lt;br /&gt;
CALL TRIN.MAIL.SUB(RECIP, FRM, BAD, SUBJECT, OPTIONS)&lt;br /&gt;
STOP&lt;br /&gt;
&lt;br /&gt;
ADD.ROW:&lt;br /&gt;
   * Write OUTREC to OUTFILE, line at a time&lt;br /&gt;
   WRITESEQ OUTREC APPEND ON OUTFILE.F ELSE STOP &amp;#039;ERROR WRITING &amp;#039;:OUTFILE&lt;br /&gt;
RETURN&lt;br /&gt;
&lt;br /&gt;
PARSE.ATB.NAMES:&lt;br /&gt;
   PRINT &amp;#039;Parsing Recall&amp;#039;&lt;br /&gt;
   CONVERT &amp;quot; &amp;quot; TO @VM IN RECALL&lt;br /&gt;
   CONVERT &amp;quot;~&amp;quot; TO &amp;quot;&amp;quot; IN RECALL&lt;br /&gt;
   TOT.FLDS=DCOUNT(RECALL&amp;lt;1&amp;gt;,@VM)&lt;br /&gt;
   NUM.FLDS=0&lt;br /&gt;
   FLD.LIST=&amp;#039;&amp;#039; ; COL.HEAD.LINE=&amp;#039;&amp;#039;&lt;br /&gt;
   INFILE=&amp;#039;&amp;#039;&lt;br /&gt;
   FOR F=1 TO TOT.FLDS&lt;br /&gt;
      FLD.NAME=RECALL&amp;lt;1,F&amp;gt;&lt;br /&gt;
      * Check this word to see if it&amp;#039;s a file name, select, &lt;br /&gt;
      * get-list or dictionary atb&lt;br /&gt;
      IF INFILE=&amp;#039;&amp;#039; THEN&lt;br /&gt;
         OPEN FLD.NAME TO DUMMY THEN&lt;br /&gt;
            INFILE=FLD.NAME&lt;br /&gt;
            OPEN INFILE TO INFILE.F ELSE STOP 201,INFILE&lt;br /&gt;
            OPEN &amp;#039;DICT&amp;#039;,INFILE TO @DICT ELSE STOP 201,&amp;#039;DICT &amp;#039;:INFILE&lt;br /&gt;
            CLOSE DUMMY&lt;br /&gt;
         END&lt;br /&gt;
      END ELSE&lt;br /&gt;
         * Add a field to field list, if it&amp;#039;s in the dictionary&lt;br /&gt;
         * and it&amp;#039;s not already in the list and it&amp;#039;s type I or D&lt;br /&gt;
         LOCATE FLD.NAME IN FLD.LIST&amp;lt;1&amp;gt; SETTING POS ELSE&lt;br /&gt;
            * Check to see if this field is mapped to an oracle column name&lt;br /&gt;
            * ...silently discard, if it is not&lt;br /&gt;
            LOCATE FLD.NAME IN SQLREC&amp;lt;2&amp;gt; SETTING POS THEN&lt;br /&gt;
               ORACLE.FIELD.NAME=SQLREC&amp;lt;3,POS&amp;gt;&lt;br /&gt;
               ORACLE.FIELD.SIZE=SQLREC&amp;lt;4,POS&amp;gt;&lt;br /&gt;
               READ DREC FROM @DICT, FLD.NAME THEN&lt;br /&gt;
                  IF DREC&amp;lt;1&amp;gt;=&amp;#039;I&amp;#039; OR DREC&amp;lt;1&amp;gt;=&amp;#039;D&amp;#039; THEN GOSUB STORE.FIELD&lt;br /&gt;
               END&lt;br /&gt;
            END&lt;br /&gt;
         END&lt;br /&gt;
      END&lt;br /&gt;
   NEXT F&lt;br /&gt;
   IF NUM.FLDS = 0 THEN&lt;br /&gt;
      PRINT &amp;#039;NO ATB NAMES FOUND IN RECALL&amp;#039;&lt;br /&gt;
      STOP&lt;br /&gt;
   END&lt;br /&gt;
   PRINT&lt;br /&gt;
RETURN&lt;br /&gt;
&lt;br /&gt;
STORE.FIELD:&lt;br /&gt;
   NUM.FLDS+=1&lt;br /&gt;
   COL=NUM.FLDS&lt;br /&gt;
   TYP=DREC&amp;lt;1&amp;gt;&lt;br /&gt;
   ATB=DREC&amp;lt;2&amp;gt;&lt;br /&gt;
   CNV=DREC&amp;lt;3&amp;gt;&lt;br /&gt;
   HED=DREC&amp;lt;4&amp;gt;&lt;br /&gt;
   WID=DREC&amp;lt;5&amp;gt;&lt;br /&gt;
   IF CNV[1,1]=&amp;#039;D&amp;#039; THEN CONVERT &amp;#039;R&amp;#039; TO &amp;#039;D&amp;#039; IN WID&lt;br /&gt;
   IF CNV=&amp;#039;&amp;#039; THEN CNV=&amp;#039;*&amp;#039;&lt;br /&gt;
   FLD.LIST&amp;lt;1,COL&amp;gt;=FLD.NAME&lt;br /&gt;
   FLD.LIST&amp;lt;2,COL&amp;gt;=CNV&lt;br /&gt;
   FLD.LIST&amp;lt;3,COL&amp;gt;=TYP&lt;br /&gt;
   FLD.LIST&amp;lt;4,COL&amp;gt;=ATB&lt;br /&gt;
   FLD.LIST&amp;lt;5,COL&amp;gt;=WID&lt;br /&gt;
   FLD.LIST&amp;lt;6,COL&amp;gt;=ORACLE.FIELD.NAME&lt;br /&gt;
   FLD.LIST&amp;lt;7,COL&amp;gt;=ORACLE.FIELD.SIZE&lt;br /&gt;
   IF HED=&amp;#039;&amp;#039; THEN HED=FLD.NAME&lt;br /&gt;
   CONVERT @VM TO &amp;quot;_&amp;quot; IN HED&lt;br /&gt;
   CONVERT &amp;quot; &amp;quot; TO &amp;quot;_&amp;quot; IN HED&lt;br /&gt;
   * This is the first line of the output file&lt;br /&gt;
   COL.HEAD.LINE&amp;lt;1,COL&amp;gt;=HED&lt;br /&gt;
   IF DREC&amp;lt;1&amp;gt; # &amp;#039;D&amp;#039; THEN EXECUTE \CD \:INFILE:\ \:FLD.NAME CAPTURING DUMMY&lt;br /&gt;
RETURN&lt;br /&gt;
&lt;br /&gt;
FIND.SELECT.LINE:&lt;br /&gt;
   SELECT.LINE=&amp;#039;&amp;#039;&lt;br /&gt;
   PRE=&amp;quot;EXECUTE \&amp;quot; ; LEN.PRE=LEN(PRE)&lt;br /&gt;
   * Skip the first &amp;quot;source&amp;quot; code line&lt;br /&gt;
   LINE.NUM=2 ; MAX.LINE=DCOUNT(RECALL,@AM)&lt;br /&gt;
   LOOP&lt;br /&gt;
      * Strip the line to it&amp;#039;s actual code&lt;br /&gt;
      LINE=RECALL&amp;lt;LINE.NUM&amp;gt;[LEN.PRE+1, 999]&lt;br /&gt;
      LINE=FIELD(LINE,&amp;#039;\&amp;#039;,1)&lt;br /&gt;
      * Is it a GET.LIST or SELECT?&lt;br /&gt;
      FIRST.WORD=FIELD(TRIM(LINE),&amp;#039; &amp;#039;,1)&lt;br /&gt;
      IF FIRST.WORD=&amp;#039;GET.LIST&amp;#039; OR FIRST.WORD=&amp;#039;GET-LIST&amp;#039; OR FIRST.WORD=&amp;#039;SELECT&amp;#039; OR FIRST.WORD=&amp;#039;SSELECT&amp;#039; THEN&lt;br /&gt;
         SELECT.LINE=LINE&lt;br /&gt;
      END&lt;br /&gt;
   UNTIL SELECT.LINE#&amp;#039;&amp;#039; OR LINE.NUM&amp;gt;MAX.LINE DO&lt;br /&gt;
      LINE.NUM += 1&lt;br /&gt;
   REPEAT&lt;br /&gt;
RETURN&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Conversion script</name></author>
	</entry>
</feed>