|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre à l'essai
![]() Inscription : mai 2007 Messages : 45 ![]() |
Bonjours,
Je cherche un moyen de populer des Tables PL/SQL et puis de les utiliser avec des commandes SQL ou de les exporter comme ref cursor et ce sans creer d'objets dans le data dictionary. Tout doit ce faire a l'interieur de "Declare" : Jusqu'a present je ne suis pas parvenus. J'ai essayé des variantes avec des fonction pipelined et la command "row pipe": Code :
Mon but ultime est de créer des anonymous blocks depuis java, de les expedier sur le serveur pour qu'il soient traités sur le serveur et de recupèrer un ref cursor en sortie sans avoir creé un objet sur le serverur. Quelqu'un a t'il un example de transformation d'une table PL/SQL en SQL sachant que toute commande "CREATE or REPLACE" est prohibée? Voici ma derniere tentative : ca échoue car la pseudo colonne "level" ne s'eincremente pas pour la table PL/SQL alors qu'elle s'incremente bien pour la colonne. Code :
|
||||
|
|
00
|
|
|
#2 | |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 534 ![]() |
Bonjour,
Citation:
__________________
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
|
|
|
#3 | ||||
|
Membre à l'essai
![]() Inscription : mai 2007 Messages : 45 ![]() |
Actuellement le code ci dessous me permet d'envoyer un anonymous block pour faire un traitement et je recupere un string:
Code :
Code :
D'une manière generale j'essaie de mettre au point une methode qui me permette de generer un block de code sur le client, qu'on soumet au serveur, et le serveur renvoie un rowset. Ce serait le pendant PL/SQL du statment SQL. Je n'ai de success qu'avec un String, je m'essaie au rowset. |
||||
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 534 ![]() |
Regardez si vous ne trouvez pas votre bonheur dans ceci:
__________________
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
|
|
|
#5 |
|
Membre à l'essai
![]() Inscription : mai 2007 Messages : 45 ![]() |
Helas, il y a plein de belles choses mais elle requierent le type OBJECT, pas le type RECORD. Subtile difference qu'on ne souligne pas assez dans la doc PL/SQL : OBJECT ne peux pas etre declaré dans un anonymous block: Il semble qu'il doive imperativement être dans le data dictionary. Cela exclu semble t il alors l'utilisation de fonction PIPEPLINED avec PIPE ROW. J'avais pensé simplement faire un PIPE ROW au STDOUT ou faire qlqchose du genre REF_CURSOR=f(PIPE). Mais voila avec f(pipe) qui n'accepte que les type "OBJECTS" et le type "OBJECT" est exclut des anonymous blocks. La boucle est bouclée.
Sinon je trouve aisement comment remplir un associative array à partir d'un Ref cursor, mais rien pour l'inverse. Je cherche donc maintenant à récuperer un ARRAY, c'est mon dernier espoir. NT: Vraiment domage que la methode du "connect by < level " avec utilisation du level comme indice du tableau ne fonctionne pas. C'eut été un moyen élégant pour transformer un tableau en table SQL. Ce qui me fait le plus raler est qu'Oracle ne donne pas d"erreur. |
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 534 ![]() |
La fonction sur laquelle pointe mon lien retourne un curseur et ne fait intervenir aucun objet.
__________________
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
|
|
|
#7 |
|
Membre à l'essai
![]() Inscription : mai 2007 Messages : 45 ![]() |
Le malheur est que cette fonction traduit le rowset issus d'un SQL d'une table physique en un ref cursor. La source n'est pas une table PL/SQL.
La transformation d'un set de valeurs issus de VARRAY ou ASSOCIATIVE ARRAY en colonnes d'un authentique rowset comme en produisent les select sur tables, cursor et ref cursor semble etre le bas qui blesse. Comment produire un ref cursor a partir de table PL/SQL? |
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
|
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : mai 2007 Messages : 45 ![]() |
Un pipeplined function doit avoir comme argument un type object ou derivé d'un object mais un anonymous block ne peut declare ce type. Mais si tu as un example du contraire, je suis preneur.
Ca fait des heures que j'essaie des trucs pour contourner cette limitation. J'ai ete jusqu'a declarer un fonction pipe qui derive la table dual pour pour ensuite faire un ROW PIPTE (dual%type). Mais héhé, on ne peut pas deriver la table sys.dual en un type table. tu ne vois le message qu'a l'execution :p |
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#11 | ||||
|
Membre à l'essai
![]() Inscription : mai 2007 Messages : 45 ![]() |
Les fonctions pipeplined ne traitent que les types de base (int,varchar2) ou les objects. Les row des tables, ref cursor sont considerée comme objects. Les Records, et les tuple issus de PL/SQL tables ne sont pas des objects.
Mais probleme est lié à proprieté du type "OBJECT" : Code :
Code :
http://igor-db.blogspot.com/2007/03/...ly-create.html |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com