|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Étudiant Inscription : novembre 2008 Messages : 17 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 307 ![]() |
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. |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Étudiant Inscription : novembre 2008 Messages : 17 ![]() |
Quand on crée un type objet de type tableau genre :
Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 307 ![]() |
Code :
|
||
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Étudiant Inscription : novembre 2008 Messages : 17 ![]() |
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 :
|
||
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 307 ![]() |
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. |
|
|
00
|
|
|
#7 | ||||
|
Invité de passage
![]() Étudiant Inscription : novembre 2008 Messages : 17 ![]() |
Ca va pour l'utilisation mémoire je gère. l'exemple que j'ai mis est une version simplifiée dans mon cas j'ai une requête plus complexe qui ne retourne que 2-3 lignes.
par contre j'ai essayé de mettre en place le bulk collect dans mon code et j'ai toujours la même erreur Code :
Code :
est ce que c'est possible de faire fonctionner dans l'état actuel? ou alors faut que je bricole quelque chose dans mes types... |
||||
|
|
00
|
|
|
#8 | ||
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 523 ![]() |
Code :
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
||
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Étudiant Inscription : novembre 2008 Messages : 17 ![]() |
Ta réponse me confirme dans ce que j'étais en train de tester
du coup on peut pas faire un objet type table de record et y faire du bulk collect. il faut soit passer par une boucle classique avec un traitement ligne par ligne ou alors découper le tableau en créant un type tableau par colonne. c'est bien ca? |
|
|
00
|
|
|
#10 | ||||
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 523 ![]() |
BULK COLLECT fonctionne bien avec des tableaux de RECORDS, mais ces derniers ne peuvent pas être stockés en base, donc la technique de la table PL/SQL déclarée dans une spécification de package est une bonne solution:
Code :
Code :
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
||||
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Étudiant Inscription : novembre 2008 Messages : 17 ![]() |
Ok.
Je voulais tester un peu les CREATE TYPE voir ce que ca avait dans le ventre comparé à un type table créé localement. au final mon tableau va être utilisé par plusieurs utilisateurs dans plusieurs procédures du coup je cherchait une solution pour "mutualiser" mon tableau. En tout cas merci pour vos réponses j'y vois beaucoup plus clair ![]() Bonne continuation |
|
|
00
|
|
|
#12 | |||
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Étudiant Inscription : novembre 2008 Messages : 17 ![]() |
Pas mal cette solution je vais essayer de la tester. Pour ce qui est des perfs je bosse sur des petites bases avec des gros serveur donc je penses pas que je pourrais obtenir des résultats significatifs. mais bon si j'ai un peu de temps cet après midi je vais me créer un environnement et essayer de tester ca
|
|
|
00
|
|
|
#14 | ||||||||||
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Y'a un truc qu'il faut prendre en compte qui me pousse moi à plutot utiliser des type globaux, c'est la portée des variables tableau.
Lorsque tu déclares une table de manière globale, tu peux l'utiliser comme table dans une requête, et ce que ce soit dans un autre package ou directement. Ceci n'est pas le cas pour un type d'un package, enfin à ma connaissance, si quelqu'un a une solution je suis preneur! Code :
Code :
Code :
Code :
Code :
|
||||||||||
|
|
00
|
|
|
#15 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 307 ![]() |
|
|
|
00
|
|
|
#16 | |
|
Invité de passage
![]() Étudiant Inscription : novembre 2008 Messages : 17 ![]() |
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::: Dans les commentaires j'ai pu voir que quelqu'un avait tester les types et les tables et il dit ca : Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com