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 :

Create package Vs Create type


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut Create package Vs Create type
    Bonjour à tous,

    je suis actuellement en plein dilemme et à la recherche de quelqu'un pour m'éclairer.

    Mon problème est assez simple, j'ai un package A qui utilise une variable de type table (mon_tableau). j'ai une fonction dans un deuxième package B qui retourne comme valeur un tableau du type A.mon_tableau.

    Mon but est de ne plus rendre dépendant le package B du package A pour que d'autre package puissent utilisé ma fonction.

    j'ai donc envisagé deux solutions :
    - créer un package C avec juste une partie spécification qui contiendrait mon type tableau
    - créer un type directement en base de données

    La notion de type est un peu opaque pour moi. sur le papier ca à l'air très sympa. est ce que quelqu'un a déjà utilisé cette fonction et peut me dire si c'est aussi intéressant que ca en a l'air ou si ca a des mauvais cotés?

    Merci de vos réponses

    Leftyy

  2. #2
    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
    Je ne vois pas bien ce qui empêcherais un autre package d’utiliser la fonction en question.
    Si le type tableau est défini dans la base il devient visible pour le moteur SQL.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    Quand on crée un type objet de type tableau genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE TYPE type_record AS OBJECT
        ( seq          NUMBER (10),
    	  table_name   VARCHAR2 (50)
        ) ;
    /
     
    CREATE OR REPLACE TYPE t_tab_res_test
    AS TABLE OF type_record;
    /
    est ce que ca se manipule ensuite en PL/SQL comme une variable de type tableau PL/SQL classique?

  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
    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
     
    SQL> set serveroutput on
    SQL> 
    SQL> declare
      2    l_tab   t_tab_res_test := t_tab_res_test();
      3  Begin
      4    l_tab.extend;
      5    l_tab(1) := type_record(1,'TOTO');
      6    l_tab.extend;
      7    l_tab(2) := type_record(2,'TiTi');
      8    For i In 1..l_tab.Count Loop
      9      Dbms_Output.put_line(To_Char(l_tab(i).seq)||l_tab(i).table_name);
     10    End Loop;
     11  End;
     12  /
     
    1TOTO
    2TiTi
     
    PL/SQL procedure successfully completed

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    Ok ca a l'air pas mal.

    j'imagine que le .extend c'est pour rajouter une ligne

    par contre la question subsidiaire à 1 000 000€, il y a un moyen de combiner mon type avec le bulk collect dans ce style la :

    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
     
    	FUNCTION ma_fonction
    	RETURN t_tab_res_test
    	IS
     
    		CURSOR c_tab  IS
    		SELECT sec , table_name
                    FROM ma_table
     
    		v_tab_res t_tab_res_test := t_tab_res_test();
     
    	BEGIN
    		OPEN c_tab;
    		v_tab_res.extend;
    		FETCH c_tab
    		BULK COLLECT INTO v_tab_res;
    		CLOSE c_tab;
     
    		return v_tab_res;
    	END ma_fonction;

  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
    Lisez SELECT INTO Statement with BULK COLLECT Clause pour exemple.
    Dans ce cas nul besoin d'initialiser la collection ou d'extend. Mais, assurez-vous que vous comprenez bien l'implication de la lecture d'une table entière dans la mémoire.

  7. #7
    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 mnitu Voir le message
    ...Si le type tableau est défini dans la base il devient visible pour le moteur SQL.
    En termes des performance passer par les objets coûte plus cher.

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    Bonjour tout le monde

    Un petit UP de ce topic pour ceux que ca interresse je suis tombé sur un article du site asktom.oracle.com sur le sujet des objets PL/SQL et des types (en Anglais par contre dsl ).

    http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::11_QUESTION_ID:246014735810

    Dans les commentaires j'ai pu voir que quelqu'un avait tester les types et les tables et il dit ca :

    I did my test on comparing the time on fetching into pl/sql table vs. fetching into a SQL type and
    then CAST it, and yes the SQL type option is much faster,28% on average, in a 30,000 records
    resultset.
    ce qui a l'air de dire que les SQL types sont plus rapide que les tables PL/SQL.

  9. #9
    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
    Il y a quelqu’un qui a dit que la Terre est plate.
    Par contre si vous avez un petit test qui démontre ce que quelqu’un (et vous) dites …

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

Discussions similaires

  1. [WPF] Could not create an instance of type
    Par Doug_ dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 10/09/2007, 09h04
  2. Probléme Ktooblar (create package)
    Par teuchi dans le forum Java ME
    Réponses: 1
    Dernier message: 05/10/2006, 09h21
  3. [PL/SQL] [9i] Packages et CREATE <<objet>>
    Par ftrifiro dans le forum Oracle
    Réponses: 3
    Dernier message: 04/05/2006, 14h26
  4. Réponses: 12
    Dernier message: 26/01/2006, 14h51
  5. [MSDE] CREATE RULE sur un type utilisateur ?
    Par Raduris dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/01/2005, 12h24

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