A voir également:
- Une Procedure stockée sour Oracle en PL/SQL
- Le point d'entrée de procédure est introuvable dans la bibliothèque de liens dynamiques ✓ - Forum Logiciels
- Le point d'entrée de procédure discard virtual memory ✓ - Forum Windows
- Point d'entrée introuvable dans KERNEL32.dll ✓ - Forum Windows
- Point d'entrée de procédure introuvable ✓ - Forum Logiciels
- Sql server recovery - Télécharger - Gestion de données
6 réponses
jcvlad
Messages postés
7
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
17 septembre 2007
14
12 sept. 2007 à 17:46
12 sept. 2007 à 17:46
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
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
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
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
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.
Alors merci beaucoup à toi d'avoir pris le temps de répondre.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.