valeur d'un linesize renseignée par un select
Bonjour à tous,
je tiens a dire d'abord que je suis patissier reconverti en teckos exploitation de base :aie:
Sinon j'ai beau chercher partout je ne trouve pas comment renseigner par un select une variable d'environnement comme le set linesize !!! Remarquez même au taf je n'ai trouvé personne pour me dire çà.
Je detaille un peu :
au taf dans le cadre d'export de table en fichier texte, on fixe la valeur du linesize "a la main" dans chaque script (lancé sous unix avec sqlplus sur oracle 10.2 g)
J'arrive "déjà" à récupérer dans une variable la longueur de ma ligne avec ce select dans du pl/sql:
Code:
1 2 3 4 5 6
|
select sum(nvl(dataprecision,datalength)
as MA_VARIABLE
from ALL_TAB_COLUMNS
where owner = 'NOM_DU_OWNER'
and TABLE_NAME = 'NOM_TABLE' |
Alors après j'essaye de faire un
Code:
1 2
|
EXECUTE IMMEDIATE ('SET LINESIZE ' || MA_VARIABLE') |
Et bien ca marche pas bien du tout 8O !
J'ai un message d'erreur mais je suis à la maison et je n'ai pas accès à distance pour vous dire lequel.
Pourtant si je lance un script sous unix avec
Code:
1 2
|
sqlplus user/pwd @mon_script.sql ma_variable |
et que mon script contient
Code:
1 2 3 4
|
show linesize
set linesize ma_variable
show linesize |
Et ben là çà marche bien :ccool:
Donc je me dis que ca doit être possible de renseigner mon linesize directement avec le résultat d'un select affecté à une variable.
Je tiens à préciser même s'il y a des fautes de frappe ou de syntaxe ici dans mon message, au boulot ca marche bien quand je fais du pl/sql. je n'ai juste pas le script en question sous les yeux !
Est ce qu'un gourou peut me dire s'il est possible de renseigner par "variable" ou select une variable d'environnement ? Et si oui comment ? :D
Merci d'avance à tous et un grand bravo pour le site dont je me suis inspiré fréquemment.
D.
pas une réponse mais le script en question et l'erreur !
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
set serveroutput on
set echo on
DECLARE
longueur_ligne number (6);
req_sample VARCHAR2(2048);
BEGIN
-- assigne la valeur dans la variable longueur_ligne
select sum(nvl(data_precision,data_length))
into longueur_ligne
from ALL_TAB_COLUMNS
where OWNER = 'MARKET'
and TABLE_NAME = 'CBL29995';
--construction de la requete
req_sample := ' set linesize ' || longueur_ligne ;
-- affiche la variable
DBMS_OUTPUT.PUT_LINE ( 'Longueur Ligne : ' || TO_CHAR(longueur_ligne));
EXECUTE IMMEDIATE (req_sample);
END; |
Si je désactive la ligne ca marche !
Sinon voici les erreurs qui apparaissent :
Code:
1 2 3 4
|
ERROR at line 1:
ORA-00922: missing or invalid option
ORA-06512: at line 15 |
:cry: