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

Oracle Discussion :

[Sql] Extraction Table


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 23
    Points : 21
    Points
    21
    Par défaut [Sql] Extraction Table
    bonjour,
    je ne comprend pas pourquoi ma procedure ne ramene qu'une suele colonne(bank_id) dans le fichier d'extraction, alors que je veux extraire 2 colonnes(bank_id et bankname) .
    y a til qlq'un qui peut m'aider à trouver le bug?
    voici le code:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    CREATE OR REPLACE PROCEDURE my_extract
    	(
    		PC$Table      in Varchar2,                      -- Nom de la table a extraire
    		PC$Fichier    in Varchar2,                      -- Nom du fichier de sortie
    		PC$Repertoire in Varchar2,                      -- Nom du directory de sortie
    		PC$Separateur in Varchar2 Default ';',          -- Caractere de separation
    		PC$DateFMT    in Varchar2 Default 'DD/MM/YYYY' -- Format des dates		
    	) IS
     
     
    LF$Fichier  UTL_FILE.FILE_TYPE ;
    LC$Ligne    Varchar2(32767) ;
    LI$I        Integer ;
    LC$DateFMT  Varchar2(40) := '''' || PC$DateFMT || '''' ;
    TYPE REFCUR1 IS REF CURSOR ;
    cur		REFCUR1;
    -- Colonnes de la table --
      CURSOR C_COLTAB(PC$Tab in VARCHAR2)  IS
     
      SELECT
      	COLUMN_NAME,
    	DATA_TYPE
      FROM
      	USER_TAB_COLUMNS
      WHERE
      	TABLE_NAME = PC$Tab
      AND
      	DATA_TYPE IN ('NUMBER','VARCHAR2');
    LC$Separateur	Varchar2(2) := PC$Separateur ;
    LC$Requete	Varchar2(10000) ;
    LC$Desc		Varchar2(10000) ;
    LC$SQLW		VARCHAR2(10000):= 'SELECT ';
    --pc$col		VARCHAR2(256) ;
     
    TYPE TYP_VAR_TAB is VARRAY(2) of VARCHAR(10);
    pc$col TYP_VAR_TAB := TYP_VAR_TAB('BANK_ID','BANKNAME');
    -----------------------------------------
    -- Ouverture d'un fichier d'extraction --
    -----------------------------------------
    FUNCTION Ouvrir_fichier
    	(
    		PC$Dir in Varchar2,
    		PC$Nom_Fichier in Varchar2
    	) RETURN UTL_FILE.FILE_TYPE
    IS
      Fichier	UTL_FILE.FILE_TYPE ;
      LC$Msg	Varchar2(256);
    Begin
      Fichier := UTL_FILE.FOPEN( PC$Dir, PC$Nom_Fichier, 'W', 32764 ) ;
      If not UTL_FILE.IS_OPEN( Fichier ) Then
    	LC$Msg := 'Erreur ouverture du fichier (' || PC$Dir || ') ' || PC$Nom_Fichier ;
      	RAISE_APPLICATION_ERROR( -20100, LC$Msg ) ;
      End if ;
      Return( Fichier ) ;
    Exception
    When UTL_FILE.INVALID_PATH Then
    	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'File location is invalid.';
    	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
    When UTL_FILE.INVALID_MODE Then
    	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'The open_mode parameter in FOPEN is invalid.';
    	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
    When UTL_FILE.INVALID_FILEHANDLE Then
    	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'File handle is invalid.';
    	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
    When UTL_FILE.INVALID_OPERATION	Then
    	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'File could not be opened or operated on as requested.';
    	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
    When UTL_FILE.READ_ERROR	Then
    	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'Operating system error occurred during the read operation.';
    	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
    When UTL_FILE.WRITE_ERROR Then
    	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'Operating system error occurred during the write operation.';
    	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
    When UTL_FILE.INTERNAL_ERROR then
    	LC$Msg := PC$Dir || PC$Nom_Fichier || ' : ' || 'Unspecified PL/SQL error';
    	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
     
    When others Then
    	LC$Msg := 'Erreur : ' || To_char( SQLCODE ) || ' sur ouverture du fichier ('
    	   || PC$Dir || ') ' || PC$Nom_Fichier ;
    	RAISE_APPLICATION_ERROR( -20070, LC$Msg ) ;
    End Ouvrir_fichier ;
    Begin
      -- Ouverture du fichier --
      LF$Fichier := Ouvrir_fichier( PC$Repertoire, PC$Fichier ) ; 
      -- Construction de la requete -- 
      LC$Requete := LC$SQLW  ||pc$col(1)||','|| pc$col(2) ||'      from '||  PC$table;
     
      F_TRACE( LC$Requete, 'T' ) ;
      -- Extraction des lignes --
      Open cur For LC$Requete ;
      Loop
    	Fetch cur Into LC$Ligne ;
    	Exit when cur%NOTFOUND ;
     
    	  UTL_FILE.PUT_LINE( LF$Fichier, LC$Ligne ) ;
    	--End if ;
      End loop ;
      Close cur;
      -- Fermeture fichier --
      UTL_FILE.FCLOSE( LF$Fichier ) ;
     
    End ;
    /

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Voici où ça foire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LC$Ligne    Varchar2(32767) ;
    Fetch cur Into LC$Ligne ;
    Soit tu déclares LC$Ligne en C_COLTAB%ROWTYPE; mais l'affichage ne marchera pas directement (c'est un groupe de colonne).
    Soit tu changes la requete en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LC$Requete := LC$SQLW  ||pc$col(1)||' || '','' || '|| pc$col(2) 
    ||'      from '||  PC$table;
    Ca te permet de récupérer les champs concaténés.
    SELECT BANK_ID || ',' || BANKNAME from MATABLE
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

Discussions similaires

  1. [Pl/Sql] extraction d'une table et ftp
    Par atanabe dans le forum Oracle
    Réponses: 4
    Dernier message: 19/07/2006, 07h26
  2. commande SQL truncate table xxx
    Par Yogy dans le forum SQL
    Réponses: 1
    Dernier message: 07/10/2004, 14h57
  3. [PL/SQL] Utilisation table PL/SQL dans clause IN
    Par Yorglaa dans le forum PL/SQL
    Réponses: 13
    Dernier message: 05/10/2004, 10h36
  4. requete sql mutlis tables
    Par tommath dans le forum Langage SQL
    Réponses: 12
    Dernier message: 30/08/2004, 09h54
  5. [SQL SERVER] Table contient trop d'enregistrements ?
    Par Tankian dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 10/08/2004, 10h40

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