Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Une Procedure stockée sour Oracle en PL/SQL

Aragorn, le jeudi 20 novembre 2003 à 10:20:04
Bonjour,

alors voila, j'ai une petite procedure a réaliser (notre première) en PL/SQL sous oracle.

le principe est assez simple : il y a 2 tables sous oracle : 1 table TYPEMEDICAMENT avec en clé primaire TypeMedicament, et un champ LibelleMedicament ; une autre table MEDICAMENT avec en clé primaire NumMedicament, 1 champ NomMedicament, et une clé etrangere vers la clé primaire de la table TYPEMEDICAMENT : Typemedicament.

le but du probleme est de créer une procedure stockée en SQL permettant de changer des codes types des medicaments dans la BD : exemple :
ancien code (=TypeMedicament) : HIV2B, nouveau : MIVH ; ancien SYN-B, nouveau : GIVHA, ....

plusieurs niveaux sont envisagables : ou bien les anciens et nouveaux codes sont placés en parametres, ou bien ils sont saisis, ou bien encore on cré un table où l'on ira chercher les modofication

merci bcp par avance pour votre aide, et au plaisir de pouvoir vous aidez aussi dans d'autres langages de prog ;)
Répondre à Aragorn  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Aragorn, le vendredi 21 novembre 2003 à 18:56:20
Personne ?
Répondre à Aragorn

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jcvlad, le mercredi 12 septembre 2007 à 17:40:36
salue ! ça doit faire un sacré bye que t'attends ta réponse toi looooool eh bien j'ai quelques idées pour t'aider.

d'abord, le pb est un des pbs classiques d'oracle : on n'y respecte pas encore certains termes de SQL2 comme des références du genre ON UPDATE qui permettraient de modifier toutes les clés (primaires ou étrangères) dans les tables "filles" ou elles existent dès qu'on touche à la table mère... ç'aurait résolu ton pb en quelques lignes, du genre depuis la création des tables médoc là :

create table typemedicament(typemedoc char(10) not null,libellemedoc char(10),
primary key(typemedoc));

create table medicament(nummedoc number(3) not null, typemedoc char(10),
primary key(nummedoc),
foreign key(typemedoc) references typemedicament(typemedoc) ON UPDATE CASCADE); --- dommage, ça n'existe pas encore !!!


l'autre truc embêtant, c'est qu'on peut pas introduire des CREATE, ALTER ou DROP dans les procédures et fonctions SQL. dommage, sinon on aurait fait un truc du genre :
- supprimer la référence (clé étrangère), comme ceci
alter table medicament drop constraint fk;

- faire les modifs nécessaires
update typemedicament set typemedoc='MIVH' where typemedoc='HIV2B';
update medicament set typemedoc='MIVH' where typemedoc='HIV2B';

- remettre la clé étrangère
alter table medicament add constraint fk foreign key (typemedoc) references typemedicament(typemedoc);

Aïaïaïaïe... ton pb est bien compliqué... Heureusement qu'ils ont inventé EXECUTRE IMMEDIATE qui permet de régler le pb de l'utilisation des CREATE, ALTER, etc... qui sont des requêtes SQL, dans des fonctions et procédures, qui relèvent du PL/SQL.


Voici la solution finale que je propose, un peu tirée par les cheveux, mais bon... :

---- script de création et d'insertion des tables de test ----------
create table typemedicament(typemedoc char(10) not null,libellemedoc char(10),
constraint pk primary key(typemedoc));

create table medicament(nummedoc number(3) not null, typemedoc char(10),
primary key(nummedoc),
constraint fk foreign key (typemedoc) references typemedicament(typemedoc));

insert into typemedicament values
('HIV2B','blabla');
insert into typemedicament values
('SYN-B','blabla');
insert into medicament values
(1,'HIV2B');
insert into medicament values
(2,'SYN-B');


---- Procédure UPDATE_TABLES qui supprime d'abord les contraintes de clés, fais les modifs, et remet les contraintes -----
--------------------------------- eh oui, c'était ça mon idée !!! tirée par les cheveux comme je l'ai dit -----------------------------
accept oldtype prompt 'Veuillez entrer l ancien type a modifier : ';
HIV2B
accept newtype prompt 'Veuillez entrer le nouveau type a enregistrer : ';
MIHVA
create or replace procedure update_tables is
begin
execute immediate 'alter table medicament drop constraint fk';
execute immediate 'alter table typemedicament drop constraint pk';

execute immediate 'update typemedicament set typemedoc=''&newtype'' where typemedoc=''&oldtype''';
execute immediate 'update medicament set typemedoc=''&newtype'' where typemedoc=''&oldtype''';

execute immediate 'alter table typemedicament add constraint pk primary key (typemedoc)';
execute immediate 'alter table medicament add constraint fk foreign key (typemedoc)
references typemedicament(typemedoc)';
end;
/
execute update_tables;




Et le tour est joué ! bien-sûr les choses seront plus simples si les gars d'oracle tiennent compte de ON UPDATE [CASCADE] !!! looool
Répondre à jcvlad

3


  • 2
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
jcvlad, le mercredi 12 septembre 2007 à 17:46:51
salue ! ça doit faire un sacré bye que t'attends ta réponse toi looooool eh bien j'ai quelques idées pour t'aider.

d'abord, le pb est un des pbs classiques d'oracle : on n'y respecte pas encore certains termes de SQL2 comme des références du genre ON UPDATE qui permettraient de modifier toutes les clés (primaires ou étrangères) dans les tables "filles" ou elles existent dès qu'on touche à la table mère... ç'aurait résolu ton pb en quelques lignes, du genre depuis la création des tables médoc là :

create table typemedicament(typemedoc char(10) not null,libellemedoc char(10),
primary key(typemedoc));

create table medicament(nummedoc number(3) not null, typemedoc char(10),
primary key(nummedoc),
foreign key(typemedoc) references typemedicament(typemedoc) ON UPDATE CASCADE); --- dommage, ça n'existe pas encore !!!


l'autre truc embêtant, c'est qu'on peut pas introduire des CREATE, ALTER ou DROP dans les procédures et fonctions SQL. dommage, sinon on aurait fait un truc du genre :
- supprimer la référence (clé étrangère), comme ceci
alter table medicament drop constraint fk;

- faire les modifs nécessaires
update typemedicament set typemedoc='MIVH' where typemedoc='HIV2B';
update medicament set typemedoc='MIVH' where typemedoc='HIV2B';

- remettre la clé étrangère
alter table medicament add constraint fk foreign key (typemedoc) references typemedicament(typemedoc);

Aïaïaïaïe... ton pb est bien compliqué... Heureusement qu'ils ont inventé EXECUTRE IMMEDIATE qui permet de régler le pb de l'utilisation des CREATE, ALTER, etc... qui sont des requêtes SQL, dans des fonctions et procédures, qui relèvent du PL/SQL.


Voici la solution finale que je propose, un peu tirée par les cheveux, mais bon... :

---- script de création et d'insertion des tables de test ----------
create table typemedicament(typemedoc char(10) not null,libellemedoc char(10),
constraint pk primary key(typemedoc));

create table medicament(nummedoc number(3) not null, typemedoc char(10),
primary key(nummedoc),
constraint fk foreign key (typemedoc) references typemedicament(typemedoc));

insert into typemedicament values
('HIV2B','blabla');
insert into typemedicament values
('SYN-B','blabla');
insert into medicament values
(1,'HIV2B');
insert into medicament values
(2,'SYN-B');


---- Procédure UPDATE_TABLES qui supprime d'abord les contraintes de clés, fais les modifs, et remet les contraintes -----
--------------------------------- eh oui, c'était ça mon idée !!! tirée par les cheveux comme je l'ai dit -----------------------------
accept oldtype prompt 'Veuillez entrer l ancien type a modifier : ';
HIV2B
accept newtype prompt 'Veuillez entrer le nouveau type a enregistrer : ';
MIHVA
create or replace procedure update_tables is
begin
execute immediate 'alter table medicament drop constraint fk';
execute immediate 'alter table typemedicament drop constraint pk';

execute immediate 'update typemedicament set typemedoc=''&newtype'' where typemedoc=''&oldtype''';
execute immediate 'update medicament set typemedoc=''&newtype'' where typemedoc=''&oldtype''';

execute immediate 'alter table typemedicament add constraint pk primary key (typemedoc)';
execute immediate 'alter table medicament add constraint fk foreign key (typemedoc)
references typemedicament(typemedoc)';
end;
/
execute update_tables;




Et le tour est joué ! bien-sûr les choses seront plus simples si les gars d'oracle tiennent compte de ON UPDATE [CASCADE] !!! looool
Répondre à jcvlad

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
youyou, le jeudi 18 octobre 2007 à 15:29:01
Bonjour,
jaime pas le plsql
Répondre à youyou

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tjsmoi, le jeudi 20 décembre 2007 à 12:11:14
La réponse ne servira peut-être par à Aragorn, mais elle m'est utile à moi... Surtout que le PL_SQL moins on aime, plus on a besoin d'aide.


Alors merci beaucoup à toi d'avoir pris le temps de répondre.
Répondre à tjsmoi

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Netsage, le jeudi 3 janvier 2008 à 12:06:46
Bonjour;

Bonne année 2008.

Merci à jcvlad ça ma permis de trouver la solution à une erreur de compilation d'une requêtte PL/SQL contenant un DROP Table.
Répondre à Netsage
Procedure stockées (Résolu) Bonjour, j'ai un problème avec les procedures stockées sous oracle 8i: Si je défini ma procedure dans un fichier sql et je l'execute par la suite sur la consolme de sql plus àa marche exemple: my_proc-affiche.sql create or replace procedure... www.commentcamarche.net/forum/affich-7294038-procedure-stockees
Procedure stockée sous oracle 8i (Résolu) Bonjour, je débute avec oracle 8i et toad, et je bloque sur les procedures stockées, pour commencer j'ai testée une procedure stockée très basique create or replace procedure hello (msg in varchar2) is begin DBMS_OUTPUT.put_line(msg); end hello;... www.commentcamarche.net/forum/affich-7051772-procedure-stockee-sous-oracle-8i
PL/SQL - Introduction au langage PL/SQL Introduction au langage PL/SQL Le langage PL/SQL est un langage L4G (entendez par ce terme un langage de quatrième génération), fournissant une interface procédurale au SGBD Oracle. Le langage PL/SQL intègre parfaitement le langage SQL en lui... www.commentcamarche.net/contents/plsql/plsqlintro.php3
YouTube refuse ma video créée avec Windows Movie MakerLa source la plus fréquente de cette erreur est que la vidéo est encore au format Windows Movie Maker et qu'elle n'a pas été exportée dans un format standard. Il vous faut donc l'enregistrer dans un format standard. Les manipulations à suivre sont... www.commentcamarche.net/faq/sujet-7809-youtube-refuse-ma-video-creee-avec-windows-movie-maker
Compacter les bases SQLite de Firefox 3SQLite ? Firefox 3 utilise des bases de données SQLite pour stocker l'historique, les marque-pages, le système anti-phishing, etc. SQLite est une base de données très performante. Cela permet d'offrir d'excellentes performances, des recherches... www.commentcamarche.net/faq/sujet-11807-compacter-les-bases-sqlite-de-firefox-3
Connexion à une base Oracle en php1. Périmètre Cet article est un exemple de connexion à une base Oracle par le biais d'un script php. Cet article ne traite pas la configuration de votre serveur Oracle, et de votre client Oracle. Nous partons du principe que vous pouvez accéder à... www.commentcamarche.net/faq/sujet-123-connexion-a-une-base-oracle-en-php
SVP Aide procédure stockée sql server (Résolu)Coucou tous le monde ! Je veux faire une procédure stockée paramétrée qui a pour but d'afficher tous les enregistrements dont le nom de l'entreprise commence par les trois premières lettres que je tape dans la partie du paramètre : regardez... www.commentcamarche.net/forum/affich-5351012-svp-aide-procedure-stockee-sql-server
Resolution d'1 exercice pl/sql (Résolu)Bonjour, est ce quelk1 peut me donner une solution pour cet exercice: Créer un bloc PL/SQL qui détermine les n employés ayant les salaires les plus élevés. a. La valeur de n est introduite via un paramètre de substitution SQL*PLUS. b. Récupérez les... www.commentcamarche.net/forum/affich-5636173-resolution-d-1-exercice-pl-sql
Retour d'une instruction update en PL/SQL (Résolu)Bonjour, Voila, j'ai un problème et je n'arrive pas à trouver la moindre doc la dessus. en fait, je fais des appels à une procédure PL/SQL qui est donc stockée dans la base de données. Dans cette procédure, j'appelle plusieurs... www.commentcamarche.net/forum/affich-5524219-retour-d-une-instruction-update-en-pl-sql
Télécharger HandbrakeHandbrake est une open source multi plateforme permettant la conversion des fichiers DVDs en MPEG-4. Il supporte tout type de source DVD comme notamment : VIDEO_TS, les images DVD ou real DVD (crypté ou non, mais la méthode de protection à... www.commentcamarche.net/telecharger/telecharger-34055689-handbrake
Télécharger MyMobilerMyMobiler est une application destinée à visualiser l'écran de votre Pocket PC depuis un ordinateur Windows. Vous pouvez donc prendre le contrôle de votre ordinateur de poche en utilisant uniquement le pointeur de votre souris. De plus, les saisies de... www.commentcamarche.net/telecharger/telecharger-34055476-mymobiler
Télécharger PsiDans la gamme de la messagerie instantanée, Psi est une nouvelle venue ! Psi est une application de messagerie instantanée rapide et léger. De plus c'est un open-source multi-plateforme. Avec la technologie Unicode et Localisation de Psi, le... www.commentcamarche.net/telecharger/telecharger-34055719-psi
Les internautes souriants ont plus d'amis(Paris - Relax news) - Une étude américaine, publiée dans la revue américaine Nature, démontre que les internautes prenant pour avatar une photo d'eux avec le sourire, ont plus de contacts sur les réseaux du Web, .Le sociologue Nicholas Christakis de... www.commentcamarche.net/actualites/les-internautes-souriants-ont-plus-d-amis-5846976-actualite.php3
La source principale de plaisir des hommes est les nouvelles technologies, devant le sexe(Paris - Relax news) - Le sexe n'est plus la principale source de plaisir chez les hommes, devancé par les nouvelles technologies. Selon la dernière étude menée par Menstyle.fr et Ipsos, auprès de 300 hommes CSP+ âgés de 25 à 49 ans, 39% des hommes... www.commentcamarche.net/actualites/la-source-principale-de-plaisir-des-hommes-est-les-nouvelles-technologies-devant-le-sexe-5847472-actualite.php3
Le langage SQLQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,... www.commentcamarche.net/contents/sql/sqlintro.php3
SQL - Création de tableLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE... www.commentcamarche.net/contents/sql/sqlcreate.php3
SQL - Commande SELECTLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la... www.commentcamarche.net/contents/sql/sqlsel.php3