Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
775 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Exécuter une chaîne de caractère en PL/SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exécuter une chaîne de caractère en PL/SQL

n°1226469
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-10-2005 à 18:14:20  profilanswer
 

Sous Oracle.
 
Dans une boucle sur une liste de tables, j'ai besoin de faire une requête sur chacune des tables.
J'ai que du PL/SQL sous la main.
 
J'ai trouvé ça sur le net (orafaq, donc une source normalement sérieuse...)
 

Citation :

Can one use dynamic SQL statements from PL/SQL?
Starting from Oracle8i one can use the "EXECUTE IMMEDIATE" statement to execute dynamic SQL and PL/SQL statements (statements created at run-time). Look at these examples. Note that statements are NOT terminated by semicolons:  
 EXECUTE IMMEDIATE 'CREATE TABLE x (a NUMBER)';
 
 -- Using bind variables...
 sql_stmt := 'INSERT INTO dept VALUES (:1, :2, :3)';
 EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, location;
 
        -- Returning a cursor...
 sql_stmt := 'SELECT * FROM emp WHERE empno = :id';
 EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;
 
One can also use the older DBMS_SQL package (V2.1 and above) to execute dynamic statements. Look at these examples:  
 CREATE OR REPLACE PROCEDURE DYNSQL AS
   cur integer;
   rc  integer;
 BEGIN
   cur := DBMS_SQL.OPEN_CURSOR;
   DBMS_SQL.PARSE(cur, 'CREATE TABLE X (Y DATE)', DBMS_SQL.NATIVE);
   rc := DBMS_SQL.EXECUTE(cur);
   DBMS_SQL.CLOSE_CURSOR(cur);
 END;
 /
 
More complex DBMS_SQL example using bind variables:  
 CREATE OR REPLACE PROCEDURE DEPARTMENTS(NO IN DEPT.DEPTNO%TYPE) AS
   v_cursor integer;
   v_dname  char(20);
   v_rows   integer;
 BEGIN
   v_cursor := DBMS_SQL.OPEN_CURSOR;
   DBMS_SQL.PARSE(v_cursor, 'select dname from dept where deptno > :x', DBMS_SQL.V7);
   DBMS_SQL.BIND_VARIABLE(v_cursor, ':x', no);
   DBMS_SQL.DEFINE_COLUMN_CHAR(v_cursor, 1, v_dname, 20);
   v_rows := DBMS_SQL.EXECUTE(v_cursor);
   loop
     if DBMS_SQL.FETCH_ROWS(v_cursor) = 0 then
        exit;
     end if;
     DBMS_SQL.COLUMN_VALUE_CHAR(v_cursor, 1, v_dname);
     DBMS_OUTPUT.PUT_LINE('Deptartment name: '||v_dname);
   end loop;
   DBMS_SQL.CLOSE_CURSOR(v_cursor);
 EXCEPTION
   when others then
        DBMS_SQL.CLOSE_CURSOR(v_cursor);
        raise_application_error(-20000, 'Unknown Exception Raised: '||sqlcode||' '||sqlerrm);
 END;
 /


 
sauf que chez moi, ça plante sur le EXECUTE IMMEDIATE si je ne met pas de "USING" comme quoi il manque un mot clé (j'en ai pas besoin). Et si je met un using pour faire joli, ben ça plante dessus en me disant qu'il attends un : / @ ou chais pas quoi.
 
Une idée ???

mood
Publicité
Posté le 19-10-2005 à 18:14:20  profilanswer
 

n°1226518
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-10-2005 à 18:59:33  profilanswer
 

Comprends pas...
 
J'ai refait la même chose que tout à l'heure, et ce coup-ci ça marche !
 
(tant mieu vous me direz :D)
 

Code :
  1. declare
  2.   dte varchar2(8);
  3.   tblnme varchar2(255);
  4.   sqlcmd varchar2(4000);
  5. begin
  6.   select 'matable' into tblnme from dual;
  7.   select to_char(sysdate, 'YYYYMMDD') into dte from dual;
  8.   select 'update ' || tblnme || ' set datmod = :1' into sqlcmd from dual;
  9.   execute immediate (sqlcmd) using dte;
  10. end;

n°1226627
Beegee
Posté le 19-10-2005 à 20:30:07  profilanswer
 

C'est que tu n'as pas fait la même chose :p
 
(et puis c'est quoi ce champ varchar pour stoquer une date ? :D )
 
(et les SELECT FROM dual dans du PL/SQL, c'est pas utile ... autant faire une assignation [ := ] )


Message édité par Beegee le 19-10-2005 à 20:30:17
n°1226713
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-10-2005 à 23:08:39  profilanswer
 

les assignations plantent, j'y peux rien :spamafote:
 
sinon, c'est un varchar, parceque c'est comme ça dans l'ERP sur lequel je bosse


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Exécuter une chaîne de caractère en PL/SQL

 

Sujets relatifs
Couper chaîne de caractère[Résolu][SQL]Résultat d'une requete dans variable.
EXtraire une valeur d'une requête SQL pour l'exploiter dans vba[Access/SQL] Syntax error converting the varchar value...
Casse Tête SQLErreur lors de la création d'une BD SQL sous win.
Aide requête SQL Accesscaractère ASCII dans batch DOS
init d'un dict à partir d'une chaîne de caractère [résolu] 
Plus de sujets relatifs à : Exécuter une chaîne de caractère en PL/SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR