2nd post: Logout vs prop:sql 
Author Message
 2nd post: Logout vs prop:sql

Hi,

  I would like to put some programming standard according to Oracle
tables.  I want to be sure that concurency access is optimised and that
no dead lock will ever occur.  My Oracle DBA is telling me that any SQL
commands are taking care of "record Locking" "internally".  So according
to this assumption, which of these two forms of update do you think
would be the best to use?:

---->Form 1:

  LOOP
    ERREUR# = FALSE
    LOGOUT(2,ORAC_PIECES)  ! Dbut transaction
                           ! LOGOUT lock fichier si ncessaire
    IF ERRORCODE()
      IF CLIP(FILEERRORCODE()) = ''

      ELSE
        ERR_ORACLE = FILEERRORCODE() & ' ' & FILEERROR()
      END
      ROLLBACK           ! On annule tout si erreur
      IF CONFIRM_ITM('ClarionPiece ' & ERR_ORACLE,'Voulez-vous essayer
nouveau?')
        CYCLE
      ELSE
        ERREUR# = TRUE
        BREAK
      END
    END

    CLEAR(OPCS:RECORD,-1)
    OPCS:NO_DESSIN       = CLIP(PCS:NO_DESSIN)
    OPCS:COULEUR_PANNEAU = CLIP(PCS:COULEUR_PANNEAU)
    OPCS:COULEUR_EDGE    = CLIP(PCS:COULEUR_EDGE)
    GET(ORAC_PIECES,OPCS:CPCS_PIECES_KEY)
    IF ERROR() OR CLIP(OPCS:NO_DESSIN) <> CLIP(PCS:NO_DESSIN) OR
CLIP(OPCS:COULEUR_PANNEAU) <>
       CLIP(PCS:COULEUR_PANNEAU) OR CLIP(OPCS:COULEUR_EDGE) <>
CLIP(PCS:COULEUR_EDGE)

      ! cration d'une nouvelle fiche statistiques

      OPCS:GROSSEUR_LOT    = 0
      OPCS:QTE_ENTREPOT    = 0
      OPCS:QTE_MINIMUM     = 0
      OPCS:QTE_MAXIMUM     = 0
      OPCS:QTE_MAXPROD     = 0
      OPCS:QTE_PRODUITE    = 0
      OPCS:QTE_UTILISEE    = 0

      OPCS:TOTAL_MISEPROD  = CURQTE_MISEPRD
      OPCS:TOTAL_DEBITAGE  = CURQTE_DEBITAGE
      OPCS:TOTAL_EMBALLAGE = CUR_QTEEMBALL

      ADD(ORAC_PIECES)
      IF ERRORCODE()
        IF CLIP(FILEERRORCODE()) = ''

        ELSE
          ERR_ORACLE = FILEERRORCODE() & ' ' & FILEERROR()
        END
        ROLLBACK  ! On annule depuis le logout.
        IF CONFIRM_ITM('ClarionPiece ' & ERR_ORACLE,'Voulez-vous essayer
nouveau?')
          CYCLE
        ELSE
          ERREUR# = TRUE
          BREAK
        END
      ELSE
        COMMIT    ! On termine la transaction engage depuis le logout
        BREAK
      END

    ELSE

      ! Arme la vrification d'accs concurrentiel

      OraclePosition = POSITION(OPCS:CPCS_PIECES_KEY)

      WATCH(ORAC_PIECES)                !Armer la vrification et
      REGET(ORAC_PIECES,OraclePosition) !Obtenir les dernires

      ! modification d'une fiche statistiques existante

      OPCS:TOTAL_MISEPROD  = CURQTE_MISEPRD
      OPCS:TOTAL_DEBITAGE  = CURQTE_DEBITAGE
      OPCS:TOTAL_EMBALLAGE = CUR_QTEEMBALL

      PUT(ORAC_PIECES)
      IF ERRORCODE()
        IF CLIP(FILEERRORCODE()) = ''

        ELSE
          ERR_ORACLE = FILEERRORCODE() & ' ' & FILEERROR()
        END

        ROLLBACK

        IF CONFIRM_ITM(ERR_ORACLE,'Voulez-vous essayer nouveau?')
          CYCLE
        ELSE
          ERREUR# = TRUE
          BREAK
        END
      ELSE
        COMMIT
        BREAK
      END
    END
  END

---->Form #2:

  CASE OPERATION
    OF 'A'
      CMDE_SQL = 'INSERT /*+ APPEND */ INTO CL_CMDREMPL('  &|
                    'COULR_EQUIVL,'                        &|
                    'COULR_REMPLC,'                        &|
                    'CODE_REMPLAC)'                        &|
                 ' VALUES ('                               &|
                    '''' & CLIP(CMR:COULR_EQUIVL)  & ''',' &|
                    '''' & CLIP(CMR:COULR_REMPLC)  & ''',' &|
                    '''' & CLIP(CMR:CODE_REMPLAC)  & ''')'

    OF 'M'
      CMDE_SQL = 'UPDATE CL_CMDREMPL' &|
                    ' SET CODE_REMPLAC = ''' & CLIP(CMR:CODE_REMPLAC) &
''''  &|
                  ' WHERE COULR_EQUIVL = ''' & CLIP(CMR:COULR_EQUIVL) &
''''  &|
                    ' AND COULR_REMPLC = ''' & CLIP(CMR:COULR_REMPLC) &
''''

    OF 'D'
      CMDE_SQL = 'DELETE FROM
CL_CMDREMPL'                                    &|
                  ' WHERE COULR_EQUIVL = ''' & CLIP(CMR:COULR_EQUIVL) &
''''  &|
                    ' AND COULR_REMPLC = ''' & CLIP(CMR:COULR_REMPLC) &
''''
  END

  LOOP
    SETCURSOR(CURSOR:Wait)

    ORAC_CMDREMPL{PROP:SQL} = CLIP(CMDE_SQL)
    IF FILEERRORCODE() = 0
      SETCURSOR(CURSOR:Arrow)
      BREAK
    ELSE
      CASE OPERATION
        OF 'A'
          ERR_ORACLE = 'CL_CMDREMPL/INSERT: ' & FORMAT(FILEERRORCODE())
& ' ' & FILEERROR()
        OF 'M'
          ERR_ORACLE = 'CL_CMDREMPL/UPDATE: ' & FORMAT(FILEERRORCODE())
& ' ' & FILEERROR()
        OF 'D'
          ERR_ORACLE = 'CL_CMDREMPL/DELETE: ' & FORMAT(FILEERRORCODE())
& ' ' & FILEERROR()
      END

      ORAC_CMDREMPL{PROP:SQL} = 'ROLLBACK'
      IF FILEERRORCODE() <> 0
        SETCURSOR(CURSOR:Arrow)

        AFF_ERREUR('CL_CMDREMPL/ROLLBACK: ' & FORMAT(FILEERRORCODE()) &
' ' & FILEERROR(), |
                   'Veuillez consulter un technicien S.V.P.')
        GOTO FIN_TRAIT
      END

      SETCURSOR(CURSOR:Arrow)

      IF CONFRM_ORCL_ITM(ERR_ORACLE,'Voulez-vous essayer nouveau?')
        CYCLE
      ELSE
        GOTO FIN_TRAIT
      END
    END
  END

  LOOP
    SETCURSOR(CURSOR:Wait)

    ORAC_CMDREMPL{PROP:SQL} = 'COMMIT'
    IF FILEERRORCODE() = 0
      SETCURSOR(CURSOR:Arrow)
      BREAK
    ELSE
      SETCURSOR(CURSOR:Arrow)
      IF CONFRM_ORCL_ITM('CL_CMDREMPL/COMMIT: ' &
FORMAT(FILEERRORCODE()) & ' ' & FILEERROR(), |
                         'Voulez-vous essayer nouveau?')
        CYCLE
      ELSE
        GOTO FIN_TRAIT
      END
    END
  END

FIN_TRAIT

RETURN

Thanks for your time in advance!

Stphane



Mon, 30 Sep 2002 03:00:00 GMT  
 
 [ 1 post ] 

 Relevant Pages 

1. Logout vs prop:sql

2. PROP:Sql or PROP:SqlFilter

3. Repeat of .c4 posting on printer{prop:print} question 95 vs NT

4. HELP: SQL ODBC date range, 2nd post

5. Moving to MS SQL ??? 2nd Post

6. Compuserve vs Internet 2nd (corrected) posting

7. SQL - How to use Prop:Sql effectively

8. 2nd post: Access vs property sheet problem!

9. embedded SQL, filename{PROP:SQL}

10. MS SQL 7.0 vs. MS SQL 2000

11. PROP:SQL Question....

12. file{prop:sql} bug

 

 
Powered by phpBB® Forum Software