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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Mettre le nom d'une table en paramètre dans un script Sql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mettre le nom d'une table en paramètre dans un script Sql

n°1227813
Tessa008
Posté le 21-10-2005 à 10:52:16  profilanswer
 

Bonjour,
 
J'ai un long script sql faisant référence à une table au moins 40 fois.
Je souhaiterais que cette table soit un paramètre d'entrée dans ce script, puisque je suis amené à lancer ce script plusieurs fois mais avec à chaque fois un nom de table différent
Une solution serait d'ouvrir le script et faire un "Edition" "Remplacer" le nom de la table par le nom souhaité, mais ceci est une manipulation manuelle.
Existe - t -il une syntaxe en SQL pour mettre une table en paramètre ?
 
Je sais que dans un script on peut entrer la valeur d'un attribut par  
select a, b from table
where a=&monchamp;
 
et ceci est valable pour une table aussi
 
select a,b from &table;
where a='unevaleur';
 
mais dans tel cas dans un script il faut rentrer le nom de la table plusieurs fois quand celle-ci apparait plusieurs fois.
 
Donc savez vous s'il est possible d'avoir une table en paramètre dans un script ?
Si vous avez des réponses, cela m'interesserait de savoir....
 
Merci d'avance.


---------------
Tessa
mood
Publicité
Posté le 21-10-2005 à 10:52:16  profilanswer
 

n°1227826
Beegee
Posté le 21-10-2005 à 11:02:54  profilanswer
 

Quel SGBD ? Que langage de programmation ?
 
Il faut faire du SQL dynamique ...

n°1227832
Tessa008
Posté le 21-10-2005 à 11:14:36  profilanswer
 

Beegee a écrit :

Quel SGBD ? Que langage de programmation ?
 
Il faut faire du SQL dynamique ...


 
bonjour,
 
mon script est fait en sql (j'ai un script avec des requetes de creation d'une table (create et insert) et un autre script avec des requetes selects sur cette table) ,  
et le sgbd est oracle.
je sais pas ce que c'est du sql dynamique, mais je chercherai.
tu penses sincèrement que c'est possible ?


---------------
Tessa
n°1227840
Beegee
Posté le 21-10-2005 à 11:24:49  profilanswer
 

Il suffit de transformer :
 
CREATE TABLE toto (test VARCHAR2(10));
 
En :
 
DECLARE
  tableName VARCHAR2;
BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE ' || tableName || ' (test VARCHAR2(10))';
END;
 
(il manque ici la récupération du nom de la table)
 
Tu es sous unix ? windows ?

n°1227845
Tessa008
Posté le 21-10-2005 à 11:27:26  profilanswer
 

je suis sous windows,
en fait j'utilise toad pour faire ces requetes.


---------------
Tessa
n°1227896
Beegee
Posté le 21-10-2005 à 12:14:16  profilanswer
 

Tu peux faire une procédure PL/SQL qui prend en paramètre d'entrée le nom de la table, et ensuite tu appelles cette procédure une fois par table.

n°1227897
Oreste
Posté le 21-10-2005 à 12:16:07  profilanswer
 

Encore faut il qu il ait Oracle, Sql Server... mais moi je parierai sur du MySQL donc pas prog SQL avancé...

n°1227899
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-10-2005 à 12:16:25  profilanswer
 

avec toad, t'as un bouton (à côté du bouton executer) qui permet d'éxécuter un bloc de code comme un script.
 
a ce moment, les statement begin et tout ça sont bien pris en compte

n°1227905
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-10-2005 à 12:17:36  profilanswer
 

Oreste a écrit :

Encore faut il qu il ait Oracle, Sql Server... mais moi je parierai sur du MySQL donc pas prog SQL avancé...


bah lis sont second post ;) il est sous Oracle, sous Windows et il utilis TOAD :p

n°1227907
Oreste
Posté le 21-10-2005 à 12:17:41  profilanswer
 

Ne pas prendre en compte ma remarque ci dessus j ai pas vu qu il avait Toad :)

mood
Publicité
Posté le 21-10-2005 à 12:17:41  profilanswer
 

n°1227909
Oreste
Posté le 21-10-2005 à 12:18:04  profilanswer
 

Oui oui desole j ai sauté le post :d

n°1227910
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-10-2005 à 12:18:44  profilanswer
 

faut faire comme moi : toujours lire les topics en partant de la fin, comme ça t'es sûr de pas avoir un wagon de retard ;)

n°1228839
Tessa008
Posté le 22-10-2005 à 20:31:12  profilanswer
 

Beegee a écrit :

Tu peux faire une procédure PL/SQL qui prend en paramètre d'entrée le nom de la table, et ensuite tu appelles cette procédure une fois par table.


 
Bonjour,
 
Merci pour vos messages, vos réponses, et ces pistes.
Mais ça reste encore un peu confus pour moi.
 
Le mieux est-il de faire du Sql dynamique en utilisant l’instruction suivante ?
 
DECLARE  
  tableName VARCHAR2;  
BEGIN  
  EXECUTE IMMEDIATE 'CREATE TABLE ' || tableName || ' (test VARCHAR2(10))';  
END;
 
 
Ou faut il créer des procédures sql ?
(une procédure pour la création de la table et une autre pour les requêtes selects sur cette table sachant bien que ces requêtes sont très complexes et retournent des tas de chiffres)
 
Ou faut-il utiliser les deux ?
 
Mais je doute bien qu’on puisse créer une procédure pour les requêtes.
 
Je vous confirme que le seul outil que j’ai pour faire mes scripts est toad,
Je n’ai pas sql server, pas d’accès direct à Oracle.
 
Si je n’ai pas été claire sur mon post, voici en gros le contenu de mes scripts :
 
______________________________________
Script 1 :
 
Create table TOTO (
 Attribut 1 type1,
Attribut 2 type2,
...
Attribut n type n )
 
Insert Into TOTO (...)
 
Script 2 :
 
Select ...  from TOTO
Select ...  from TOTO, et d’autres tables
____________________________________


---------------
Tessa
n°1228862
Arjuna
Aircraft Ident.: F-MBSD
Posté le 22-10-2005 à 22:12:23  profilanswer
 

Si malgré leur nombre, le nom des tables est fixe, à mon avis, d'un point de vue purement performances, il est mieu de dupliquer les scripts.
 
Ceci dit, tu peux faire un script de ce genre (désolé, il ne fonctionne certainement pas !)
 
create or replace procedure Initilization(MaTable varchar2(50))
is
begin
    EXECUTE IMMEDIATE 'CREATE TABLE ' || tableName || ' (test VARCHAR2(10))';
    EXECUTE IMMEDIATE 'insert into ' || tableName || ' (test) values (''ma valeur'')';
end;
 
Pour les requêtes, idem. Plutôt que de faire des procédures, je te conseille toutefois de créer des vues. Plus souples, elle donnent les mêmes résultats niveau performance.


Message édité par Arjuna le 22-10-2005 à 22:13:28
n°1228863
Beegee
Posté le 22-10-2005 à 22:33:44  profilanswer
 

Tout dépend du nombre de tables à traiter.
 
La meilleure solution à mon avis est la procédure PL/SQL avec le nom de table en entrée, comme dit précédemment.
 
Du point de vue perfs à mon avis ça change rien. Le parsing du EXECUTE IMMEDIATE est négligeable par rapport à l'exécution de la requête.
 
Arjuna, je comprends pas trop ta phrase : "Plutôt que de faire des procédures, je te conseille toutefois de créer des vues. Plus souples, elle donnent les mêmes résultats niveau performance". Je ne vois pas le rapport ...

n°1228868
Arjuna
Aircraft Ident.: F-MBSD
Posté le 22-10-2005 à 23:14:36  profilanswer
 

La demoiselle parle de faire des requêtes qui retournent plein de données.
 
Plutôt que de faire des procédures stockées, à ce moment, c'est mieu de faire des vues.


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

  Mettre le nom d'une table en paramètre dans un script Sql

 

Sujets relatifs
Comment ouvrir les script de php avec mozzila firefox?Script qui passe avec Xdialog et non avec Dialog
[Résolu][SQL] Convertion de valeurs dans une requete SQL[SQL/Access] Problème de rafraichissement de zone de liste
commande script FTPSQL Transac Optimisation
Exécuter une chaîne de caractère en PL/SQLVBScript - Modification d'un fichier par script
script ne fonctionne pasPour se mettre à Java
Plus de sujets relatifs à : Mettre le nom d'une table en paramètre dans un script Sql


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