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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PL/SQL] Erreur création procédure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PL/SQL] Erreur création procédure

n°2109906
tarnx
Posté le 05-11-2011 à 12:19:33  profilanswer
 

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. CREATE OR REPLACE TYPE t_Matiere AS OBJECT (
  2. Nom VARCHAR(30),
  3. Prix_Kilo numeric(10,2),
  4. Masse_Volumique integer(4)
  5. ) ;
  6. CREATE OR REPLACE TYPE t_Dimension AS OBJECT (
  7.        Longueur integer(4),
  8. Largueur integer(4),
  9. Hauteur integer(4),
  10. Diametre integer(4)
  11. );
  12. CREATE OR REPLACE TYPE t_Piece AS OBJECT (
  13. Nom VARCHAR(30),
  14. Forme VARCHAR(30),
  15. Dimension t_Dimension,
  16. Matiere REF t_Matiere
  17. ) ;


Et les tables :
 

Code :
  1. CREATE OR REPLACE TABLE Matieres OF t_Matiere (PRIMARY KEY(Nom));
  2. CREATE OR REPLACE TABLE Pieces OF t_Piece (PRIMARY KEY(Nom));


 
J'ai donc crée la procédure :
 
 

Code :
  1. 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))
  2. IS
  3. BEGIN
  4.       INSERT INTO Pieces VALUES (p_nom,p_forme,p_dimension,
  5.       (SELECT REF(m) FROM Matieres m WHERE m.Nom = p_matiere));
  6. END;
  7. /


 
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.


Message édité par tarnx le 05-11-2011 à 17:49:04
mood
Publicité
Posté le 05-11-2011 à 12:19:33  profilanswer
 

n°2109912
Tamahome
⭐⭐⭐⭐⭐
Posté le 05-11-2011 à 14:57:57  profilanswer
 

essayes en rajoutant un "/" :
 
END;
/

n°2109932
tarnx
Posté le 05-11-2011 à 17:49:29  profilanswer
 

J'ai essayé et ça ne vient pas de là.

n°2110062
boboss75
Posté le 06-11-2011 à 20:40:50  profilanswer
 

dans la déclaration d'une fonction, on ne met pas je crois la longueur des champs VARCHAR
essayes pour voir :
CREATE OR REPLACE PROCEDURE insert_piece (p_nom IN VARCHAR, p_forme IN VARCHAR,p_dimension IN t_Dimension,p_matiere IN VARCHAR)
de plus je te conseille de ne jamais utiliser le format VARCHAR (ou CHAR) mais de privilégier plutôt VARCHAR2

n°2114020
e-TE
Posté le 30-11-2011 à 12:05:58  profilanswer
 

desolé pour le hs mais:

boboss75 a écrit :

dans la déclaration d'une fonction, on ne met pas je crois la longueur des champs VARCHAR
essayes pour voir :
CREATE OR REPLACE PROCEDURE insert_piece (p_nom IN VARCHAR, p_forme IN VARCHAR,p_dimension IN t_Dimension,p_matiere IN VARCHAR)
de plus je te conseille de ne jamais utiliser le format VARCHAR (ou CHAR) mais de privilégier plutôt VARCHAR2


je debute aussi en pl/sql, et j'aurais voulu savoir pourquoi il faut mieux eviter le varchar et privilegier le varchar2?
thanks :jap:

n°2114045
Mara's dad
Yes I can !
Posté le 30-11-2011 à 14:03:56  profilanswer
 

Extrait de la doc Oracle :
 
VARCHAR2 Datatype
 
The VARCHAR2 datatype specifies a variable-length character string.
When you create a VARCHAR2 column, you supply the maximum number of bytes or characters of data that it can hold.
Oracle subsequently stores each value in the column exactly as you specify it, provided the value does not exceed the column's maximum length of the column.
If you try to insert a value that exceeds the specified length, then Oracle returns an error.
 
You must specify a maximum length for a VARCHAR2 column.
This maximum must be at least 1 byte, although the actual string stored is permitted to be a zero-length string ('').
You can use the CHAR qualifier, for example VARCHAR2(10 CHAR), to give the maximum length in characters instead of bytes.
A character is technically a code point of the database character set.
CHAR and BYTE qualifiers override the setting of the NLS_LENGTH_SEMANTICS parameter, which has a default of bytes.
For performance reasons, Oracle recommends that you use the NLS_LENGTH_SEMANTICS parameter to set length semantics and that you use the BYTE and CHAR qualifiers only when necessary to override the parameter.
The maximum length of VARCHAR2 data is 4000 bytes.
Oracle compares VARCHAR2 values using nonpadded comparison semantics.
 
To ensure proper data conversion between databases with different character sets, you must ensure that VARCHAR2 data consists of well-formed strings.
See Oracle Database Globalization Support Guide for more information on character set support.
 
VARCHAR Datatype
 
Do not use the VARCHAR datatype.
Use the VARCHAR2 datatype instead.
Although the VARCHAR datatype is currently synonymous with VARCHAR2, the VARCHAR datatype is scheduled to be redefined as a separate datatype used for variable-length character strings compared with different comparison semantics.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°2114250
e-TE
Posté le 01-12-2011 à 14:33:35  profilanswer
 

ok merci :D j'ai toujours utilisé du varchar2 donc je m'etais jamais penché sur le varchar [:joce] je sais pourquoi maintenant :jap:


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

  [PL/SQL] Erreur création procédure

 

Sujets relatifs
comparaison et creation de repertoireQt 4.7.4 : Aide complémentaire création serveur de jeu
Creation d'un site web, le protéger à 99%Création d'un livre d'or en PHP : problème de débutant...
procédure click[SQL] Fusionner plusieurs lignes
[PL/SQL] sortir les résultats d'UPDATE dans le SPOOLErreur 500 quand mise en cache .htaccess
Plus de sujets relatifs à : [PL/SQL] Erreur création procédure


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