|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2003 Messages : 6 ![]() |
Je suis actuellement entrain de réaliser un package PL/SQL.
Etant donné que j'utilise différent Schéma/User Oracle j'ai décidé de mettre les schémasUser en variable globale jusqu'ici pas de problèmes : Dans le .pks : w_SchemaUser VARCHAR2(20) := 'SCHEMAUSER'; Or pour être sûr du type de mes champs j'ai déclaré plein de variable du style : w_var1 SCHEMAUSER.TABLE.CHAMP%TYPE; Je veux donc remplacé SCHEMAUSER par ma variable et la c'est le gros probleme ... je ne sais pas faire ... w_var1 w_SchemaUser.TABLE.CHAMP%TYPE; Ne fonctionne pas et retourne l'erreur : PLS-00487: Référence de variable 'W_SCHEMAUSER' non valide Comment faut il s'y prendre car je pense que je m'y prend mal .... Info : Je compile mes packages sous TOAD 7.2 ! C'est une base Oracle 8.1.7 ! |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
Si j'ai bien compris la problématique :
- il y a plusieurs schéma (ex: TOTO et TATA) ? - sur ces schémas, il y a les mêmes tables avec la même structure (ex : TAB1 et TAB2) ? - vous souhaitez, sur le schéma "TITI" avoir un ensemble de procédures vous permettant de manipuler, au choix, les données de TOTO ou de TATA ? Alors, de deux choses l'une : (a) Soit les structures des tables sont strictement identiques, et dans ce cas, il suffit de faire TOTO.TAB1.COL1%TYPE (b) soit les structures des tables ne sont pas strictement identiques (ex: VARCHAR2(10) contre VARCHAR2(11) ) et dans ce cas, la mutualisation n'a pas de sens Je ne vois donc pas où est le problème ? |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : décembre 2003 Messages : 6 ![]() |
J'ai effectivement 2 schémas.
Sur un premier schéma, je dispose des tables de mon application. Sur le deuxième schéma ce sont des tables temporaires me servant pour une reprise de données( ce sont donc des données d'une ancienne applis, des donnéesd e mapping ). Ne pouvant pas créer forcement un deuxieme schéma chez le client ou ne pouvant pas l'appeler comme je les fais dans mon apllication, je souhaite pouvoir mettre dans une variable ce nom de schéma pour n'avoir à le changer qu'à un seul endroit si besoin est. Et ne pas me taper tout le code pour changer le nomdu schéma.... |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
alors dans ce cas, pourquoi ne pas déclarer les variables à partir du schéma réel de l'appli et utiliser les variables pour les manipulations ?
|
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
Ce que tu veux faire n'est à mon avis pas possible sans faire d'usine à gaz.
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : décembre 2003 Messages : 6 ![]() |
PlaineR : C'est ce que je cherchai à éviter ..propreté !!!
coucoucestmoi : si j'ai compris ce que tu dis... et bien c'est ce que je cherche à faire mais le nom du schéma en variable je ne sais pas l'utiliser .... voir message 1 !! |
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
Voilà de quoi t'aider à utiliser le nom du schéma en variable :
http://sheikyerbouti.developpez.com/execute_immediate/ Le plus dur restant alors d'écrire dynamiquement la requête ! |
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Non mais là vous vous égarez les gars
Donc pour répondre : il est impossible de déclarer une variable avec un type lui-même consititué d'une variable... il n'y a AUCUN moyen. Il faut donc bien déclarer les variables pour tous les shémas... désolé |
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
si il a x schémas (SCH1, SCH2, ...) tous identiques et quil souhaite factoriser les traitements, je ne vois pas ce qui l'empêche de faire :
Code :
|
||
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
C'est pas ça qu'il veut :
mais pour reprendre ton exemple, ce serait ça : Puisque tu te rends bien compte qu'il ne peut pas déclarer la variable un %TYPE sur un schéma qui n'est pas forcément le même que le schéma attaqué dans la reqûête et là c'est pas possible |
|
|
00
|
|
|
#11 |
![]() Inscription : septembre 2004 Messages : 626 ![]() |
Je prends un peu le thread en route et je sais pas si j'ai tout compris, mais si tu as deux schémas avec les mêmes tables et des procédures communes, je penserais aux procédures en invoker's right. Si tu appelles ta procédure a partir du schema TITI, elle tape sur les tables de TITI et si tu l'appelles à partir de TATA elle interroge les tables de TATA ? C'est pas ce que tu veux faire ?
Si c'est le cas, il faut que tu remplaces tes create procedure en Code :
CREATE OR REPLACE procedure p_test authid current_user Laly.
__________________
In the heart of the truly greats, perfection is never achieved but endlessly pursued. Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...) |
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
On n'est bien d'accord que le %TYPE ne peut pas s'appliquer sur un pi_schema !!!
Mais sa procédure n'a de sens que si tous les schémas sont identiques, donc un SCH1...%TYPE est jouable, et il me semblait avoir compris que c'était après, dans l'utilisation des variables qu'il était bloqué... |
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
La solution peux résider dans la création de types au niveau SQL.
CREATE TYPE... permettant à tous les schémas de bénéficier du type. sauf bien sûr si le nombre de types à créer est extravagant.
__________________
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
|
|
|
#14 | ||
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
le probléme c'est que le type peux changer d'une base à l'autre (si j'ai bien compris
Exemple : Base B Table T (col VARCHAR2(10)) BASE B' Table T (col DATE) ogre voudrait un code transportable sur les 2 bases du genre : Code :
Est-ce que c'est clair pour tout le monde ? |
||
|
|
00
|
|
|
#15 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
Ah ouais.... j'avions point compris ça !!!!
Ben dans ce cas, il n'a pas 36 solutions : il faut qu'il écrive une procédure PL/SQL qui génèrera la procédure finale !!! |
|
|
00
|
|
|
#16 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
c'est peut-être moi qu'ai rien compris hein
mais cette question revient de temps en temps donc bah... voila quoi |
|
|
00
|
|
|
#17 | |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
Sans vouloir vous faire de la peine, ô grand maitre oraFrance,
Citation:
|
|
|
|
00
|
|
|
#18 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
Une fine gestion de synonymes ne ferait pas l'affaire ?
__________________
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
|
|
|
#19 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
qu'il y a 2 shémas ou 2 bases la problématique reste là même... tu ne peux pas mettre le schéma en paramétre dans un %TYPE
PS : d'ailleurs mon exemple n'est effectivement pas adapté il faut remplacer Base par Shema |
|
|
00
|
|
|
#20 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com