Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/11/2011, 11h31   #1
Membre actif
 
Inscription : décembre 2009
Messages : 204
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 204
Points : 186
Points : 186
Par défaut Erreur création de procédure

Bonjour à tous,

Je débute en PL/SQL et dans le cadre d'une base de gestion de produits je souhaite créer une procédure qui permet l'enregistrement de pièces.
Une pièce a une dimension et est composée d'une matière (bois, fer...).

J'ai crée les types suivants :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE OR REPLACE TYPE t_Matiere AS OBJECT (
	Nom VARCHAR(30),
	Prix_Kilo numeric(10,2),
	Masse_Volumique integer(4)
) ;
 
CREATE OR REPLACE TYPE t_Dimension AS OBJECT (
        Longueur integer(4),
	Largueur integer(4),
	Hauteur integer(4),
	Diametre integer(4)
);
 
 
CREATE OR REPLACE TYPE t_Piece AS OBJECT (
	Nom VARCHAR(30),
	Forme VARCHAR(30),
	Dimension t_Dimension,
	Matiere REF t_Matiere
) ;
Et les tables :

Code :
1
2
CREATE OR REPLACE TABLE Matieres OF t_Matiere (PRIMARY KEY(Nom));
CREATE OR REPLACE TABLE Pieces OF t_Piece (PRIMARY KEY(Nom));
J'ai donc crée la procédure :

Code :
1
2
3
4
5
6
CREATE OR REPLACE PROCEDURE insert_piece (p_nom IN VARCHAR(30), p_forme IN VARCHAR(30),p_dimension IN t_Dimension,p_matiere IN VARCHAR(30))
IS
BEGIN
      INSERT INTO Pieces VALUES (p_nom,p_forme,p_dimension,
      (SELECT REF(m) FROM Matieres m WHERE m.Nom = p_matiere));
END;
Pas bien compliquée à première vue, mais impossible de la créer normalement.
Etant donné que je suis en ligne de commande, j'ai uniquement le message :
Citation:
"created with compilations errors"
Même en bidouillant à droite à gauche, ça ne veut pas. La requête avec des valeurs fonctionne correctement.

Merci de bien vouloir me donner un petit coup de main.
tarnx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 20h51   #2
Membre éprouvé
 
Avatar de xdescamp
 
Homme Xavier Descamps
Inscription : octobre 2008
Messages : 297
Détails du profil
Informations personnelles :
Nom : Homme Xavier Descamps
Âge : 36
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2008
Messages : 297
Points : 422
Points : 422
Envoyer un message via Skype™ à xdescamp
Après le message "created with compilations errors", exécutez l'instruction suivante pour avoir le message d'erreur de compilation :
Code :
SHOW error procedure insert_piece;
xdescamp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 16h43   #3
Futur Membre du Club
 
Inscription : avril 2010
Messages : 83
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : avril 2010
Messages : 83
Points : 18
Points : 18
salut,

Quand j'exec tes scripts j'ai une erreur sur la création des tables.

Essaye de créer la table dans un premier temps et d'ajouter la contrainte de clé primaire après:

Code :
1
2
3
4
5
6
 
CREATE TABLE Matieres OF t_Matiere;
ALTER TABLE Matieres ADD (
  CONSTRAINT PK_Matieres PRIMARY KEY(Nom)
};
/
pareil pour ta table Pieces.
SgtBor est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/11/2011, 17h57   #4
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
il manque des validations lors des créations de types :

Code :
1
2
3
4
5
6
CREATE OR REPLACE TYPE t_Matiere AS OBJECT (
	Nom VARCHAR(30),
	Prix_Kilo numeric(10,2),
	Masse_Volumique integer(4)
) ;
/
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 09h39   #5
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Moi, je ne mettrais pas de taille dans les paramètres de procedure !!!!
Et transformerais VARCHAR en VARCHAR2, numeric et integer en NUMBER (types natifs "historiques" ORACLE)
Code :
1
2
3
4
5
6
CREATE OR REPLACE PROCEDURE insert_piece (p_nom IN VARCHAR,p_forme IN VARCHAR,p_dimension IN t_Dimension,p_matiere IN VARCHAR IS
BEGIN
      INSERT INTO Pieces VALUES (p_nom,p_forme,p_dimension,
(SELECT REF(m) FROM Matieres m WHERE m.Nom = p_matiere));
END;
De même , on peut se poser la question de l'emploi d'un modele objets plutot que d'un modele relationnel classique !!!
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h42.


 
 
 
 
Partenaires

Hébergement Web