2016-03-22 8 views
0

Ich bin ein Anfänger in Datenbanken Welt, meine Aufgabe war es, eine Prozedur, die einen Datensatz in einer geschachtelten Tabelle, das ist die .SQL-Datei schrieb ich schrieb:(Anweisung ignoriert) und (fehlende Ausdruck) Fehler

 
    CREATE OR REPLACE PROCEDURE TT1_AJOUTE_PERSON_DANS_ALBUM (
     numPersonnage IN NUMBER, 
     numAlbum  IN NUMBER 
    ) IS 
     tmpPersonnages TT1_personnages_ntab_type; 
    BEGIN 
     SELECT personnages 
     INTO tmpPersonnages 
     FROM TT1_Album 
     WHERE (num = numAlbum); 

     -- si la table imbriqué 'nested table' personnes est NULL on la crée 
     IF tmpPersonnages IS NULL THEN 
      UPDATE TT1_Album 
      SET personnages = NEW TT1_personnages_ntab_type() 
      WHERE (num = numAlbum); 
     END IF; 

     -- on va ajouter dans la tableau imbriqué 'nested table' (personnages) 
     -- de la table des albums (TT1_Album) 
     -- identifié par le numéro d'album passé en paramétre 
     INSERT INTO TABLE (
      SELECT a.personnages 
      FROM TT1_Album a 
      WHERE (a.num = numAlbum) 
     ) VALUES (
      -- appel du constructeur 
      -- on utilise REF() pour récupérer l'OID de la ligne sélectionée 
      -- de la table des personnages (TT1_personnage) 
      -- le personnage est identifié par le numéro de personne passé en paramétre 
      SELECT REF(p) 
      FROM TT1_personnage p 
      WHERE (p.num = numPersonnage) 
     ); 
    END; 
    /

, wenn ich die sQL-Datei ausführen erhalte ich eine Warnmeldung (Verfahren mit Kompilierungsfehlern erstellt.) und wenn ich laufen (show Fehler Prozedur TT1_AJOUTE_PERSON_DANS_ALBUM;) bekomme ich die Fehler (Anweisung ignoriert) und (fehlende Expression)

 
Errors for PROCEDURE TT1_AJOUTE_PERSON_DANS_ALBUM: 

LINE/COL ERROR 
-------- ----------------------------------------------- 
22/2  PL/SQL: SQL Statement ignored 
31/3  PL/SQL: ORA-00936: missing expression 

Ich habe bereits über dieses Problem gegoogelt und die meiste Zeit ist es passiert bec nach einem Tippfehler, aber ich denke nicht, dass es mein Fall ist! das sind die Beschreibungen der Tabellen (TT1_Album) und (TT1_personnage)

 
SQL> desc TT1_Album; 
Name          Null? Type 
----------------------------------------- -------- ------------------------- 

NUM          NOT NULL NUMBER 
TITRE          NOT NULL VARCHAR2(40) 
ANNEE          NOT NULL NUMBER 
PERSONNAGES          TT1_PERSONNAGES_NTAB_TYPE 
SQL> desc TT1_personnage; 
Name          Null? Type 
----------------------------------------- -------- ------------ 

NUM          NOT NULL NUMBER 
NOM            VARCHAR2(20) 
PRENOM            VARCHAR2(20) 
PROFESSION           VARCHAR2(20) 
SEXE            CHAR(1) 
GENRE            VARCHAR2(7) 
+0

Sie versuchen, einzufügen in eine SELECT-Anweisung. Sie müssen in eine Tabelle einfügen, und Sie sollten wahrscheinlich eine SELECT-Anweisung direkt hinter dem Namen der Tabelle und nicht eine VALUES() - Klausel verwenden. – grahamj42

Antwort

0

sich diese Syntax des Einsatzes:

INSERT INTO table 
(column1, column2, ... column_n) 
SELECT expression1, expression2, ... expression_n 
FROM source_table 
[WHERE conditions]; 

für Ihr Beispiel:

INSERT INTO TT1_Album (personnages, num) 
SELECT REF(p), numAlbum   
FROM TT1_personnage p 
WHERE p.num = numPersonnage; 
+0

immer noch Probleme! LINE/COL ERROR 22/2 PL/SQL: SQL-Anweisung ignoriert 23/13 PL/SQL: ORA-00932: inkonsistente Datentypen: erwartete REF STOUFA.TT1_PERSONNAGE_TYPE bekam STOUFA.TT1_PERSONNAGES_NTAB_TYPE das Problem weiter mehr zu erklären, mein Die Aufgabe besteht darin, eine Prozedur zu erstellen, die 2 IDs als Argumente für die Person erhält, die dem Album hinzugefügt werden soll, und eine, um das Album zu identifizieren, dem die Person hinzugefügt werden soll. Die geschachtelte Tabelle befindet sich in der Tabelle (TT1_Album), die eine einzelne Spalte des Typs REF enthält (TT1_personnage_type), den Basistyp der Tabelle (TT1_personnage). – Stoufa