Salut,
oracle 11.2.0.2 sous windows XP.
PHP 5.3
driver ODBC instantclient_11_2

Voici mon problème :
je souhaite valoriser une variable php avec le résultat d'une requête oracle qui appelle une fonction oracle.
JE veux remonter la structure de mes tables à l'aide de la fonction interne "dbms_metadata.get_ddl"

ma fonction oracle appelée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
CREATE OR REPLACE FUNCTION TABLE_STRUCT(nom_table IN varchar2)
RETURN varchar2
IS 
temp varchar2(2000);
BEGIN
select dbms_metadata.get_ddl('TABLE', nom_table) into temp from dual;
RETURN(temp);
END;
ma requête appelante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT TABLE_STRUCT('$table') AS TS FROM DUAL
Résultat :
Ma chaine est tronquée à un certains nombre de caractères...

Mes recherches :
En enquêtant sur la toile, il apparait que cela provienne des settings d'ORACLE.
J'ai donc réussi à résoudre mon problème sous SQLPLUS pour afficher la totalité de ma chaine de caractères en paramétrant mes settings Oracle:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
sqlplus> set long 100000
Hors, je veux intégrer ça dans mon script PHP qui utilise les fonctions PDO pour dialioguer avec la base Oracle.
Lorsque j'exécute ma requête précédente, la base me renvoie "(string)", car à priori le "SET LONG" est trop court.
Mon problème : comment récupérer cette chaine de caractères, certes un peu longuette (400 caractères) mais faut pas pousser non plus !

Mes tests :
1. cela fonctionne si je change ma requête de ma fonction par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
CREATE OR REPLACE FUNCTION TABLE_STRUCT(nom_table IN varchar2)
RETURN varchar2
IS 
temp varchar2(2000);
BEGIN
select 'test' into temp from dual;
RETURN(temp);
END;
ma requête appelante me renvoie bien "test"

2. J'ai également testé avec 'CLOB' au lieu de VARCHAR2 sans succès.

Questions :
0. Y a-t'il quelque chose que j'ai mal fait ou un truc que j'ai pas bien saisi ?
1. Comment modifier mes settings en PL/SQL?

ps : Mon objectif est de récupérer la structure de mes tables pour les copier ailleurs à l'aide de mon code PHP...

je suis épuisé
Merci d'avance à l'ORACLique