Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Convert to oracle
Message
 
 
À
24/06/2005 08:46:14
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Versions des environnements
Visual FoxPro:
VFP 8
Database:
Visual FoxPro
Divers
Thread ID:
01026237
Message ID:
01026423
Vues:
14
>hi all,
>
>any idea,help
>is there a way to convert vfp.table to oracle.table
>
>thanks.

Here is some code I used once to get al the tables from a DBC and create Oracle script files to create tables, insert/update triggers, and sequences. I use a trigger and sequence pair to auto populate and generate the PK column values.
#DEFINE DATABASE_NAME [UICDI]
#DEFINE VFP_CRLF CHR(13) + CHR(10)
#DEFINE 
CLEAR
CLOSE ALL
SET TALK OFF
SET EXCLUSIVE OFF
SET DELETED ON
SET SAFETY OFF
IF NOT DIRECTORY('.\Scripts')
     MD .\Scripts
ENDIF
LOCAL loUpsize
loUpsize = CREATEOBJECT('Upsize')
WITH loUpsize
     .Cr8_Tables()
     .Cr8_Sequences()
     .Cr8_Triggers()
ENDWITH
loUpsize.Release()
RETURN


DEFINE CLASS Upsize AS Custom

     DIMENSION aTables[1]
     nTableCount = 0
     
     PROTECTED PROCEDURE Init
          OPEN DATABASE DATABASE_NAME
          SET DATABASE TO DATABASE_NAME
          THIS.nTableCount = ADBOBJECTS(THIS.aTables,[TABLE])
          ASORT(THIS.aTables)
     ENDPROC
     PROCEDURE Release
          RELEASE THIS
     ENDPROC
     PROTECTED PROCEDURE Error(nError, cMethod, nLine)

     ENDPROC
     PROCEDURE Cr8_Sequences
          LOCAL lcString
          lcString = []
          FOR EACH lcTable IN THIS.aTables
               lcTable = ALLTRIM(crsTables.Table_Name)
               lcString = lcString + [CREATE SEQUENCE S_] + lcTable ;
                         + [ START WITH 1 INCREMENT BY 1;] + VFP_CRLF
          ENDFOR
          STRTOFILE(lcString, [.\Scripts\Cr8_Sequences.sql])
     ENDPROC
     PROCEDURE Cr8_Triggers
          LOCAL lcTable, lcString
          lcString = []
          FOR EACH lcTable IN THIS.aTables
               TEXT TO lcSQL TEXTMERGE NOSHOW
CREATE OR REPLACE TRIGGER <<lcTable>>_B4_INSUPDT
  before insert or update on UICDI.<<lcTable>> for each row
  declare
     v_Id   Number;
BEGIN
  :new.Last_Update := SYSDATE;
  If :new.Updated_By is NULL Then
     :new.Updated_By := USER;
  End If;
  If :new.KeyID is NULL or :new.KeyID < 1 Then
     select S_UICDI_<<lcTable>>.nextval into v_Id from dual;
     :new.KeyID := v_Id;
  End If;
End;
/

               ENDTEXT
               lcString = lcString + lcSQL
          ENDSCAN
          STRTOFILE(lcString, [.\Scripts\Cr8_Triggers.SQL])
     ENDPROC
     PROCEDURE Cr8_Tables
          LOCAL lcString, lcTable, laFields[1], lnFields, lnI
          LOCAL lcField, lcType, lnWidth, lnDec, luDefault
          lcString = []
          FOR EACH lcTable IN THIS.aTables
               USE (lcTable)
               lnFields = AFIELDS(laFields, lcTable)
               lcString = lcString + [CREATE TABLE ] + lcTable + VFP_CRLF + [     (]
               FOR lnI = 1 TO lnFields
                    lcField   = laFields[lnI, 1]
                    lcType    = laFields[lnI, 2]
                    lnWidth   = laFields[lnI, 3]
                    lnDec     = laFields[lnI, 4]
                    luDefault = IIF(not EMPTY(laFields[lnI,9]), EVALUATE(laFields[lnI, 9]), [])
                    IF lcField = [KEYID]
                         luDefault = []
                    ENDIF
                    IF RIGHT(lcString, 1) = [,]
                         lcString = lcString + VFP_CRLF + [      ]
                    ENDIF
                    lcString = lcString + lcField
                    DO CASE
                         CASE INLIST(lcType, [C], [V])
                              lcString = lcString + [               VARCHAR2(] ;
                                   + TRANSFORM(lnWidth) ;
                                   + [)]
                              IF NOT EMPTY(luDefault)
                                   lcString = lcString + [ DEFAULT '] + luDefault + [']
                              ENDIF
                         CASE lcType = [I]
                              lcString = lcString + [               NUMBER(8)]
                              IF NOT EMPTY(luDefault)
                                   lcString = lcString + [ DEFAULT ] + TRANSFORM(luDefault)
                              ENDIF
                              IF lcField = [KEYID]
                                   lcString = lcString + [ CONSTRAINT pk_] + lcTable + [_KeyID PRIMARY KEY]
                              ENDIF
                         CASE lcType = [N]
                              lcString = lcString + [               NUMBER(] ;
                                   + TRANSFORM(lnWidth) ;
                                   + [,] + TRANSFORM(lnDec) ;
                                   + [)]
                              IF NOT EMPTY(luDefault)
                                   lcString = lcString + [ DEFAULT ] + TRANSFORM(luDefault)
                              ENDIF
                         CASE lcType = [L]
                              lcString = lcString + [               NUMBER(1)]
                              IF NOT EMPTY(luDefault) AND luDefault
                                   lcString = lcString + [ DEFAULT 1 ]
                              ELSE
                                   lcString = lcString + [ DEFAULT 0 ]
                              ENDIF
                              lcString = lcString + [ CONSTRAINT ck_] + lcTable + [_] + laFields[lnI, 1] + [ CHECK (] + lcField + [ BETWEEN 0 and 1)]
                         CASE lcType = [M]
                              lcString = lcString + [               LONG]
                         CASE INLIST(lcType, [D], [T])
                              lcString = lcString + [               DATE]
                              IF NOT EMPTY(luDefault)
                                   lcString = lcString + [ DEFAULT ] + TRANSFORM(luDefault)
                              ENDIF
                    ENDCASE
                    lcString = lcString + [,]
               ENDFOR
               CLOSE TABLES ALL
               IF ASCAN(laFields, 'LAST_UPDATE', -1, -1, 1, 1) = 0
                    lcString = lcString + VFP_CRLF + [      LAST_UPDATE               DATE DEFAULT SYSDATE,]
               ENDIF
               IF ASCAN(laFields, 'UPDATED_BY', -1, -1, 1, 1) = 0
                    lcString = lcString + VFP_CRLF + [      UPDATED_BY               VARCHAR2(20),]
               ENDIF
               lcString = lcString + [);] + VFP_CRLF + VFP_CRLF
          ENDFOR
          lcString = STRTRAN(lcString, [,);], [);])
          STRTOFILE(lcString, '.\Scripts\Cr8_Tables.sql')
     ENDPROC
ENDDEFINE
Mark McCasland
Midlothian, TX USA
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform