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 :

valeur d'un linesize renseignée par un select


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut valeur d'un linesize renseignée par un select
    Bonjour à tous,

    je tiens a dire d'abord que je suis patissier reconverti en teckos exploitation de base

    Sinon j'ai beau chercher partout je ne trouve pas comment renseigner par un select une variable d'environnement comme le set linesize !!! Remarquez même au taf je n'ai trouvé personne pour me dire çà.

    Je detaille un peu :

    au taf dans le cadre d'export de table en fichier texte, on fixe la valeur du linesize "a la main" dans chaque script (lancé sous unix avec sqlplus sur oracle 10.2 g)

    J'arrive "déjà" à récupérer dans une variable la longueur de ma ligne avec ce select dans du pl/sql:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select sum(nvl(dataprecision,datalength)
    as MA_VARIABLE
    from ALL_TAB_COLUMNS
    where owner = 'NOM_DU_OWNER'
    and TABLE_NAME = 'NOM_TABLE'
    Alors après j'essaye de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EXECUTE IMMEDIATE ('SET LINESIZE ' || MA_VARIABLE')
    Et bien ca marche pas bien du tout !
    J'ai un message d'erreur mais je suis à la maison et je n'ai pas accès à distance pour vous dire lequel.

    Pourtant si je lance un script sous unix avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sqlplus user/pwd @mon_script.sql ma_variable
    et que mon script contient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    show linesize
    set linesize ma_variable
    show linesize
    Et ben là çà marche bien

    Donc je me dis que ca doit être possible de renseigner mon linesize directement avec le résultat d'un select affecté à une variable.

    Je tiens à préciser même s'il y a des fautes de frappe ou de syntaxe ici dans mon message, au boulot ca marche bien quand je fais du pl/sql. je n'ai juste pas le script en question sous les yeux !

    Est ce qu'un gourou peut me dire s'il est possible de renseigner par "variable" ou select une variable d'environnement ? Et si oui comment ?

    Merci d'avance à tous et un grand bravo pour le site dont je me suis inspiré fréquemment.

    D.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut pas une réponse mais le script en question et l'erreur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    set serveroutput on
    set echo on
    DECLARE
    longueur_ligne number (6);
    req_sample VARCHAR2(2048);
    BEGIN
    -- assigne la valeur dans la variable longueur_ligne
    select sum(nvl(data_precision,data_length))
    into longueur_ligne
    from ALL_TAB_COLUMNS
    where OWNER = 'MARKET'
    and TABLE_NAME = 'CBL29995';
    --construction de la requete
    req_sample := ' set linesize ' || longueur_ligne ;
    -- affiche la variable
    DBMS_OUTPUT.PUT_LINE ( 'Longueur Ligne : ' || TO_CHAR(longueur_ligne));
    EXECUTE IMMEDIATE (req_sample);
    END;
    Si je désactive la ligne ca marche !
    Sinon voici les erreurs qui apparaissent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ERROR at line 1:
    ORA-00922: missing or invalid option
    ORA-06512: at line 15

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    EXECUTE IMMEDIATE c'est pour executer des ordres DDL dans du PL/SQL et ça n'est pas ton besoin.
    set linesize est une commande sqlplus, tu peux affecter une variable en utilisant NEW_VALUE

    Exemple dans un fichier test2.sql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SET serveroutput ON
    SET echo ON
    -- assigne la valeur dans la variable longueur_ligne
    column longueur_ligne new_value longueur_ligne
    SELECT sum(nvl(data_precision,data_length)) as longueur_ligne
    FROM ALL_TAB_COLUMNS
    WHERE OWNER = 'SCOTT'
    AND TABLE_NAME = 'EMP';
    show linesize 
    set linesize &longueur_ligne
    show linesize
    et le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SQL> @test2.sql
    SQL> column longueur_ligne new_value longueur_ligne
    SQL> -- assigne la valeur dans la variable longueur_ligne
    SQL> SELECT sum(nvl(data_precision,data_length)) as longueur_ligne
      2  FROM ALL_TAB_COLUMNS
      3  WHERE OWNER = 'SCOTT'
      4  AND TABLE_NAME = 'EMP';
     
    LONGUEUR_LIGNE
    --------------
                50
     
    SQL> show linesize
    linesize 80
    SQL> set linesize &longueur_ligne
    SQL> show linesize
    linesize 50
    SQL>

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut Ben alors je dis Bravo


    Super !

    Un grand merci à skuatamad en particulier !

    Ta solution répond pleinement à mon besoin.
    Je vais gagner un temps fou, j'ai environ 20 à 30 fichiers à
    extraire par jour (et autant de scripts à modifier) et j'y passais
    environ 3 heures !!!!!

    Et je vais récupérer le principe pour d'autres besoins ...

    Encore Merci !!!

    Bonnes fêtes ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. valeur d'une variable renseignée par l'utilisateur
    Par alex2296 dans le forum Langage
    Réponses: 6
    Dernier message: 25/01/2011, 18h42
  2. Réponses: 0
    Dernier message: 23/04/2010, 14h23
  3. Réponses: 6
    Dernier message: 22/09/2008, 14h55
  4. Limiter le nombre d'enregistrements renvoyés par un SELECT
    Par Wilco dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/11/2004, 13h47
  5. [CR]utilisation de valeur d'un sous état par un état
    Par ministry dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 12/09/2003, 11h24

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