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:
ma requête appelante :
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;
Résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT TABLE_STRUCT('$table') AS TS FROM DUAL
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:
Hors, je veux intégrer ça dans mon script PHP qui utilise les fonctions PDO pour dialioguer avec la base Oracle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part sqlplus> set long 100000
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 parma requête appelante me renvoie bien "test"
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;
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
Partager