Bonjour, et bonnes fêtes de Pâques.
Je travaille sur une base de données relationnelle-objet, et je veux mettre à jour une référence sur un type dans une table.
Je pensais que ce que je faisais marcherait, mais j'ai deux erreurs différentes, en fonction de la méthode que j'utilise, que je ne comprends pas.
Explications par l'exemple :
Contexte général :
Il s'agit de lister des œuvres et de les faire correspondre avec des auteurs et des coauteurs.
Requête 1 :
Code :
UPDATE Les_Arts_congres
SET coauteurs = type_ref_ens_auteur(type_ref_auteur(REF(type_auteur(6, 'nouveau_nom', 'nouveau_prenom', 'nouveau_laboratoire', 'nouvelle_adresse'))))
WHERE ID_doc_scientifique = 4;
Requête 2 :
Code :
DECLARE
nouveau_coauteur type_auteur := type_auteur(6, 'nouveau_nom', 'nouveau_prenom', 'nouveau_laboratoire', 'nouvelle_adresse');
BEGIN
UPDATE Les_Arts_congres
SET coauteurs = type_ref_ens_auteur(type_ref_auteur(REF(nouveau_coauteur)))
WHERE ID_doc_scientifique = 4;
END;
Définition des types utilisés :
Auteur
Code :
CREATE OR REPLACE TYPE type_auteur AS OBJECT
(id_auteur NUMBER(5),
nom VARCHAR2(20),
prenom VARCHAR2(30),
laboratoire VARCHAR2(30),
adresse VARCHAR(100));
Référence sur un auteur
Code :
CREATE OR REPLACE TYPE type_ref_auteur AS OBJECT
(ref_auteur REF type_auteur);
Ensemble de références sur un auteur
Code :
CREATE OR REPLACE TYPE type_ref_ens_auteur AS TABLE OF type_ref_auteur;
Description de la table Les_Arts_congres
Code :
ID_DOC_SCIENTIFIQUE NUMBER(10)
TITRE VARCHAR2(100)
AUTEUR_PRINCIPAL TYPE_REF_AUTEUR
DATE_PUBLICATION DATE
MOT_CLEFS TYPE_ENS_MOT_CLEF
COAUTEURS TYPE_REF_ENS_AUTEUR
VILLE VARCHAR2(30)
PAYS VARCHAR2(30)
Les deux requêtes sont normalement équivalentes.
Pour la requête 1, j'ai l'erreur ORA-00907, qui me dit "parenthèse droite manquante", alors que ça n'est pas le cas.
Pour la requête 2, j'ai l'erreur ORA-00932, qui m'indique "
nouveau_coauteur" (au niveau de la requête) en me disant qu'il attend un type "
type_auteur", et qu'il obtient une référence sur un type "
type_auteur" (alors que la référence ne se fait qu'à partir du
REF, pas avant).
Je remercie par avance celui qui saura m'aider et me dire ce qui ne va pas.
Depuis hier, Oracle me fait des erreurs bizarres.