IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Quelle est l'équivalent de cette fonction en PL/SQL ?


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut Quelle est l'équivalent de cette fonction en PL/SQL ?
    Bonjour tout le monde,

    J'ai créé une procédure stockée en Transact SQL et j'aimerai la mettre en place pour Oracle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DECLARE @date DATETIME
    	DECLARE @Unit SMALLINT
    	DECLARE @Long SMALLINT
    	SELECT @Unit = Base1.dbo.T_LI.UNIT from T_LI
    	SELECT @Long = Base1.dbo.T_LI.LONG from T_LI
    	SELECT @Long = -@Long_Archivage -- Mets là valeur en négatif
     
    IF @Unit_Archivage = 2
    BEGIN
    SELECT @date = DATEADD(month, @, CAST(CONVERT(CHAR(8), GETDATE(), 112) AS DATETIME))
    END

    Le but de ma procédure est de supprimer des valeurs qui deviennent trop anciennes.

    Comment puis-je mettre cela en place en PL/SQL ?

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Tu parles de suppression mais j'vois pas de DELETE

    Elle fait quoi exactement cette fonction ?

    Je pense que ce serait un truc de ce style pour le début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE
    I_Unit INTEGER;
    I_Long INTEGER;
    BEGIN
     
    SELECT T_LI.UNIT, T_LI.LONG
    INTO  I_Unit, I_Long
    FROM T_LI;
    Mais après, je ne comprends pas ce que fait le reste

    Pour info, date du jour c'est TRUNC(SYSDATE) (aujourd'hui à 0h00) dans Oracle, SYSDATE étant la date plus l'heure.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut
    Exact ! Que je suis bête ...

    Le but de ma procédure est d'insérer les valeurs qui deviennent trop anciennes dans une nouvelle base de données Archive puis les supprimer dans la base courante.

    Voilà en fichier joint la procédure que j'ai réalisé en Transact SQL.

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Supprimez la partie de la procédure qui crée les tables si elles n'existent pas. Ce n'est pas la façon de procéder avec Oracle, ces objets doivent déjà être crées à l'exécution de la procédure.

    Maintenant, ce qui reste est une suite des 3 INSERT Into … Select From... suivis des 3 DELETE … qui semble à ne pas poser aucune difficulté. Sauf que, en Oracle au moins, faire ce traitement de cette manière pourrait donner des résultat incorrectes, vu que le niveau d'isolation par défaut des transactions en Oracle est READ_COMMITED.

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Sauf que, en Oracle au moins, faire ce traitement de cette manière pourrait donner des résultat incorrectes, vu que le niveau d'isolation par défaut des transactions en Oracle est READ_COMMITED.
    Tant qu'il ne se reconnecte pas ça doit pas poser de problème. Oracle est en READ_COMMITED mais voit tout de même les lignes modifiées dans sa session.

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par orafrance Voir le message
    Tant qu'il ne se reconnecte pas ça doit pas poser de problème. Oracle est en READ_COMMITED mais voit tout de même les lignes modifiées dans sa session.
    t0. Transaction T1 insert dans la table un enregistrement ou dat_rec < &date sans faire commit.

    t1. La transaction T2, qui fait l'archivage, démarre en faisaient l'INSERT INTO... SELECT... FROM …. Le niveau d'isolation par défaut READ_COMMITED garanti que l'enregistrement inséré par la transaction T1 n'est pas visible pour T2.

    t2. La transaction T1 fait commit.

    t3. La transaction T2 passe à la partie DELETE. L'enregistrement inséré par T1 est désormais visible et donc elle est supprimé sans avoir être archivé.

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/07/2018, 11h56
  2. Quelle est la différence entre les fonctions Hxxxx et SQLxxxx?
    Par THOMAS Patrice dans le forum WinDev
    Réponses: 2
    Dernier message: 30/07/2010, 11h40
  3. Quelle est mon erreur dans cette syntaxe
    Par BuzzLeclaire dans le forum Langage
    Réponses: 18
    Dernier message: 01/07/2009, 00h28
  4. Réponses: 5
    Dernier message: 19/02/2009, 23h07
  5. HREF : quelle est la signification de cette abbréviation ?
    Par Hibou57 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 06/08/2007, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo