我是数据库世界的初学者,我的任务是编写一个在嵌套表中添加记录的过程,这是我写的.sql文件:
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; /
当我运行.sql文件时,我收到一条警告消息(使用编译错误创建过程。)当我运行时(显示错误过程TT1_AJOUTE_PERSON_DANS_ALBUM;)我得到错误(语句被忽略)和(缺少表达式)
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
我已经在谷歌上搜索过这个问题,而且大部分时间都是因为一个错字而发生的事情,但我不认为这是我的情况! 这些是表格(TT1_Album)和(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 :(得分:0)
这是insert的语法:
INSERT INTO table
(column1, column2, ... column_n )
SELECT expression1, expression2, ... expression_n
FROM source_table
[WHERE conditions];
为您的例子:
INSERT INTO TT1_Album (personnages, num)
SELECT REF(p), numAlbum
FROM TT1_personnage p
WHERE p.num = numPersonnage;