|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre à l'essai
![]() Inscription : octobre 2008 Messages : 86 ![]() |
Bonjour,
J'essai en vain de trouver une façon d'appeler une fonction en lui passant plus de 4000 bytes. Ma fonction est, on ne peux plus simple. Code :
Code :
Si je met 3999 byte, sa passe. J'ai essayer avec clob, long, blob.... À chaque fois la même erreur ORA. Ma question est fort simple ( ou pas ) :Existe-il une façon d'appeler une fonction Oracle en lui passant comme paramètre une chaine de plus de 4000 caractères. En vous remerciant ! |
||||
|
|
00
|
|
|
#2 | ||
|
Membre chevronné
![]() O. JolySupport Inscription : décembre 2010 Messages : 287 ![]() |
Je suis en version 11gR2
Code :
|
||
|
00
|
|
|
#3 | ||||
|
Membre à l'essai
![]() Inscription : octobre 2008 Messages : 86 ![]() |
En faite, je me rend compte que mon problème est différent que la façon dont je l'ai présenté.
C'est dans un INSERT INTO ... que j'ai ce problème sauf si je passe par une variable. Donc Code :
MAIS. Code :
Des idées ? Dans le fond, sa revient au même que de faire un select 'CHAINE DE 6000 byte' from dual; Sa donne la même erreur. |
||||
|
|
00
|
|
|
#4 |
![]() ![]() |
En SQL la précision maximale d'un varchar est de 4000, en PL/SQL c'est 32767.
Dans votre premier cas de figure vous êtes en PL/SQL, dans le second vous appliquez une instruction purement SQL.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Inscription : octobre 2008 Messages : 86 ![]() |
En effet, c'est pour sa que mon exemple du début n'était pas représentatif de mon problème.
Mon problème est donc d'arriver à passer en paramètre une chaine de plus de 4000 bytes.. C'est dommage parce que ma fonction fctSimple()... retourne quand à elle toujours moins de 4000 bytes. Sur ora-code, l'explication de mon erreur ORA est assez clair. ORA-01704: string literal too long Cause: The string literal is longer than 4000 characters. C'est la limite des suggestions qui m'aides pas Use a string literal of at most 4000 characters. Longer values may only be entered using bind variables. Je ne veux / peux pas utiliser de bind variables |
|
|
00
|
|
|
#6 |
![]() ![]() |
Essayez de décrire un peu le pourquoi du comment afin de voir si votre problème ne peut pas être appréhendé différemment !
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#7 | ||||||
|
Membre à l'essai
![]() Inscription : octobre 2008 Messages : 86 ![]() |
J'ai un champ dans un clob, de grandeur 0 ( null ) à environs 7000 bytes.
Ma fonction fait entre-autre comme traitement retirer des bouts ainsi que d'autres traitement divers. Le contenu passe de la table A ( contenant le clob ) à la table B ( content un varchar2(4000) ) via un fichier sql ( appelons le, fichierC.sql ) Actuellement les 2 champs sont des varchar2(4000), l'ajout du clob fait partit d'un grand changement dont je dois garder pour moi les détails. Donc, un script est lancé et crée des commandes d'insert dans le fichier fichierC.sql. Code :
Ma modifications consiste donc à vouloir faire. Code :
Mais comme je disait, le retour de la fonction n'a jamais plus de 4000 bytes ! Je trouve sa dommage que le Code :
** en supposant que maFonction ajoute la valeur 2 à un champs passé en paramètre ** |
||||||
|
|
00
|
|
|
#8 | ||
![]() ![]() |
Ok, c'est l'étape avec le script SQL qui pêche.
Il n'y a pas moyen de l'écrire en une seule requête ensembliste, de ce genre : Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : octobre 2008 Messages : 86 ![]() |
Non, parce que les 2 tables ne se voient pas.
la TableB, ne peux pas voir la TableA. C'est pour sa qu'on passe par un fichier sql. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com