IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

LA Procedure DDL


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2005
    Messages : 186
    Par défaut LA Procedure DDL
    Salut,
    est ce que la taille (nombre de cararactres ) de l'argument la procedure DBMS_UTILITY.EXEC_DDL_STATEMENT est limitee.

    EXEMPLE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    length(SQL)=400;
    comment je peux execute le PL/SQL suivant
     
    begin
    SQL='CREATE TABLE TEST ....';
    DBMS_UTILITY.EXEC_DDL_STATEMENT(SQL);
    end ;
    /
    Merci

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE ton_sql;
    PS : pense aux balises code

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    DBMS_UTILITY.EXEC_DDL_STATEMENT prend un VARCHAR2 en paramètre. Une variable VARCHAR2 PL/SQL peut faire au maximum 32k. Il y a peut-être une limite inférieure pour une instruction SQL mais je ne l'ai pas trouvée dans la doc. de référence.

    Le code suivant doit fonctionner avec := pour l'affectation et il semble que "SQL" est un mot clé réservé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    declare vsql varchar2(10000);
    begin
    vsql := 'CREATE TABLE TEST ....';
    DBMS_UTILITY.EXEC_DDL_STATEMENT(vqsl);
    end ;
    /

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2005
    Messages : 186
    Par défaut
    Salut,
    voici le message d'erreur :
    ORA-00933: SQL command not properly ended ORA-06512: at "SYS.DBMS_SYS_SQL", line 824 ORA-06512: at "SYS.DBMS_SQL", line 32 ORA-06512: at "SYS.DBMS_UTILITY", line 409 ORA-06512: at line 39

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    le SQL passé en paramètre étant nous étant judicieusement caché ça va être super simple de répondre

  6. #6
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    La requête que tu as dans
    SQL='CREATE TABLE TEST ....';
    s'exécute sans erreur si tu l'exécutes manuellement ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2005
    Messages : 186
    Par défaut
    salut
    le code que j'utilise contient un cursor le voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    declare
    cursor c is
    select semaine,date_debut,date_fin from TRAFIC_PARTITIONS
    where (date_debut>=trunc(add_months(sysdate,-1),'month')-7 and date_fin<=trunc(add_months(sysdate,0),'month')+7);
    RTX varchar2(30);
    EXISTE number:=0;
    SQL1 varchar2(300);
    SQL2 varchar2(300);
    SQL3 varchar2(300);
    SQL4 varchar2(300);
    SQL5 varchar2(300);
    SQL6 varchar2(300);
    SQL7 varchar2(300);
    SQL8 varchar2(300);
    SQL9 varchar2(300);
    SQL10 varchar2(300);
    SQL11 varchar2(300);
    begin
    for rec in c loop
    RTX:='RTX_'||rec.semaine;
    select count(1) into EXISTE from tab where tname =RTX;
    if EXISTE=0 then
    SQL1:='create table '||RTX||' tablespace users as ';
    SQL2:='select r.entry_date_timestamp date_val,r.start_time_charge_timestamp start_d_t,r.uds_stream_id rtx_sqn,r.uds_record_id rtx_lfnr,';
    SQL3:='r.UDS_BASE_PART_ID,r.FREE_UNITS_INFO_FU_PACK_ID fu_pack_id,r.UDS_CHARGE_PART_ID,r.UDS_FREE_UNIT_PART_ID,r.CALL_DEST,r.FREE_CHARGE_AMOUNT,';
    SQL4:='r.FREE_CLICKS_VOLUME,r.TARIFF_DETAIL_RATE_TYPE_ID,r.TARIFF_DETAIL_RTX_CHARGE_TYPE,r.TARIFF_INFO_SNCODE,r.XFILE_BASE_CHARGE_AMOUNT,r.XFILE_BASE_CHARGE_TAX,';
    SQL5:='r.XFILE_CHARGE_TAX,r.XFILE_CALL_TYPE,r.XFILE_CHARGE_AMOUNT,r.XFILE_IND,r.net_element_network_code plcode,r.tariff_info_zpcode zpcode,';
    SQL6:='r.tariff_info_tmcode tmcode,r.FOLLOW_UP_CALL_TYPE call_type,r.cust_info_main_msisdn r_p_dn_num,r.o_p_number_address o_p_number,';
    SQL7:='r.tariff_detail_interconnect_ind rtx_type,r.cust_info_customer_id r_p_customer_id,r.cust_info_contract_id r_p_contract_id,';
    SQL8:='r.tariff_info_zncode  Destination,r.tariff_detail_ttcode ttcode,r.rated_clicks_volume/8000 unites,r.duration_volume duree_r_call,';
    SQL9:='r.data_volume duree_r_data,r.event_volume duree_r_event,r.messages_volume duree_r_msg,r.ROUNDED_VOLUME duree_f,r.rated_flat_amount montant,';
    SQL10:='r.MC_SHDES from rtx_part@rtxv7 r where r.entry_date_timestamp>='||rec.DATE_debut||' and r.entry_date_timestamp<'||rec.DATE_Fin;
    SQL11:='and r.XFILE_IND is not null  and CUST_INFO_CUSTOMER_ID=2 and 1=2';
    VSQL=SQL1||SQL2||SQL3||SQL4||SQL5||SQL6||SQL7||SQL8||SQL9||SQL10||SQL11;
     
    DBMS_UTILITY.EXEC_DDL_STATEMENT(VSQL);
    end if;
    end loop;
    end;

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2004
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 236
    Par défaut
    Je ne sais pas si je vais faire avancer le débat. Mais j'ai plusieurs questions :
    - pourquoi utiliser 11 variables pour stocker ta requête ?
    - @ est autorisé dans un nom de table ?
    - quand tu composes ta requête finale tu oublies les : devant le = .

    Cordialement

    Fdraven

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  2. [VB6] Interrompre toutes procédures
    Par lutin_vert dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/09/2002, 11h39
  3. Declaration Type ds une procedure
    Par Qwazerty dans le forum Langage
    Réponses: 6
    Dernier message: 28/08/2002, 09h09
  4. [TP]code asm dans une procedure
    Par M.Dlb dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 17/08/2002, 20h43
  5. Reprendre une procedure dans une autre ?
    Par Poisson Rouge dans le forum Langage
    Réponses: 3
    Dernier message: 17/07/2002, 22h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo