将对象值插入表PL/SQL而无需指定属性

Álv*_*aro 5 oracle plsql object oracle10g sql-insert

我有以下架构

DROP TABLE ALUMNO_ASIGNATURA;
DROP TABLE ASIGNATURA;
DROP TABLE TITULACION;
DROP TABLE PROFESOR;
DROP TABLE ALUMNO;
DROP TABLE PERSONA;


CREATE TABLE PERSONA
(   DNI             VARCHAR2(9)     CONSTRAINT PERSONA_PK                       PRIMARY KEY, 
    NOMBRE          VARCHAR2(20)    CONSTRAINT PERSONA_NOMBRE_NN                NOT NULL, 
    APELLIDO        VARCHAR2(30)    CONSTRAINT PERSONA_APELLIDO_NN              NOT NULL, 
    CIUDAD          VARCHAR2(20), 
    DIRECCIONCALLE  VARCHAR2(30), 
    DIRECCIONNUM    VARCHAR2(3), 
    TELEFONO        VARCHAR2(9), 
    FECHANACIMIENTO DATE, 
    VARON           VARCHAR2(1)     CONSTRAINT PERSONA_VARON_NN                 NOT NULL 
                                    CONSTRAINT PERSONA_VARON_CK                 CHECK (VARON BETWEEN 0 AND 1)
);

COMMENT ON COLUMN persona.varon IS '0 para mujer, 1 para hombre'; 

CREATE TABLE PROFESOR
(   IDPROFESOR      VARCHAR2(4)     CONSTRAINT PROFESOR_PK                      PRIMARY KEY, 
    DNI             VARCHAR2(9)     CONSTRAINT PROFESOR_DNI_NN                  NOT NULL
                                    CONSTRAINT PROFESOR_PERSONA_FK              REFERENCES PERSONA (DNI)                ON DELETE CASCADE
);

CREATE TABLE ALUMNO
(   IDALUMNO        VARCHAR2(7)     CONSTRAINT ALUMNO_PK                        PRIMARY KEY, 
    DNI             VARCHAR2(9)     CONSTRAINT ALUMO_DNI_NN                     NOT NULL
                                    CONSTRAINT ALUMNO_PERSONA_FK                REFERENCES PERSONA (DNI)                ON DELETE CASCADE
);

CREATE TABLE TITULACION
(   IDTITULACION    VARCHAR2(6)     CONSTRAINT TITULACION_PK                    PRIMARY KEY, 
    NOMBRE          VARCHAR2(30)    CONSTRAINT TITULACION_NOMBRE_NN             NOT NULL
);

CREATE TABLE ASIGNATURA 
(   IDASIGNATURA    VARCHAR2(6)     CONSTRAINT ASIGNATURA_PK                    PRIMARY KEY, 
    NOMBRE          VARCHAR2(50)    CONSTRAINT ASIGNATURA_NOMBRE_NN             NOT NULL, 
    CREDITOS        NUMBER(3,1), 
    CUATRIMESTRE    VARCHAR2(1), 
    COSTEBASICO     NUMBER(16,2), 
    IDPROFESOR      VARCHAR2(4)     CONSTRAINT ASIGNATURA_PROFESOR_FK           REFERENCES PROFESOR (IDPROFESOR)        ON DELETE SET NULL, 
    IDTITULACION    VARCHAR2(6)     CONSTRAINT ASIGNATURA_IDTITULACION_NN       NOT NULL
                                    CONSTRAINT ASIGNATURA_TITULACION_FK         REFERENCES TITULACION (IDTITULACION)    ON DELETE CASCADE, 
    CURSO           VARCHAR2(1)
);

CREATE TABLE ALUMNO_ASIGNATURA
(   IDALUMNO        VARCHAR2(7)     CONSTRAINT ALUMNO_ASIGNATURA_ALUMNO_FK      REFERENCES ALUMNO (IDALUMNO)            ON DELETE CASCADE, 
    IDASIGNATURA    VARCHAR2(6)     CONSTRAINT ALUMNO_ASIGNATURA_ASIGNAT_FK     REFERENCES ASIGNATURA (IDASIGNATURA)    ON DELETE CASCADE,
    NUMEROMATRICULA VARCHAR2(1)     CONSTRAINT ALUMNO_ASIGNATURA_NUM_MATR_NN    NOT NULL,
    CONSTRAINT ALUMNO_ASIGNATURA_PK PRIMARY KEY (IDALUMNO, IDASIGNATURA)
);

--ALTER TABLE ALUMNO ADD CONSTRAINT ALUMNO_DNI_UQ UNIQUE (DNI);
--ALTER TABLE PROFESOR ADD CONSTRAINT PROFESOR_DNI_UQ UNIQUE (DNI);


Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('02852373F','Noelia','Ruiz','Madrid','Romeral','34','916432348',to_date('23/09/74','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('07634664I','Benito','Encinas','Madrid','Polar','67','916436467',to_date('30/01/67','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('10210210B','Juan','Perez','Teruel','Teruel','56','936111111',to_date('01/02/70','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('12354123T','Gregorio','Llamas','Sevilla','Ro','67','942133336',to_date('17/08/79','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('12456789B','Encarna','Loles','Huesca','Huesca','67','955674523',to_date('18/06/78','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('16161616A','Luis','Ramírez','Haro','Pez','34','941111111',to_date('01/01/69','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('17171717A','Laura','Beltrán','Madrid','Gran Vía','23','912121212',to_date('08/08/74','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('18181818A','Pepe','Pérez','Madrid','Percebe','13','913131313',to_date('02/02/80','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('19191919A','Juan','Sánchez','Bilbao','Melancolía','7','944141414',to_date('03/03/66','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('20202020A','Luis','Jiménez','Nájera','Cigüeña','15','941151515',to_date('03/03/79','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('20220220B','Luis','Valiente','Lugo','San Cristobal','23','956567893',to_date('13/04/60','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('21123124R','Javier','Maganto','Madrid','Fax','23','917643653',to_date('16/07/78','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('21212121A','Rosa','García','Haro','Alegría','16','941161616',to_date('04/04/78','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('23232323A','Jorge','Sáenz','Logroño','Luis Ulloa','17','941171717',to_date('09/09/78','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('24242424A','María','Gutiérrez','Logroño','Avda. de la Paz','18','941181818',to_date('10/10/64','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('25252525A','Rosario','Díaz','Logroño','Percebe','19','941191919',to_date('11/11/71','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('26262626A','Elena','González','Logroño','Percebe','20','941202020',to_date('05/05/75','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('30303030B','Pedro','Del Río','Zamora','Antequera','89','967653424',to_date('18/12/68','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('32456245H','Gustavo','Pérez','Valencia','Numancia','234','947676576',to_date('25/04/79','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('37634764E','Mariano','Rodriguez','Madrid','Sal','56','917334653',to_date('23/05/78','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('41515151C','Eduardo','Rodriguez','Valladolid','Roquera','67','956666666',to_date('14/06/75','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('42456487E','Rita','Cantora','Soria','Robles','67','956433423',to_date('24/11/69','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('44212123J','Paloma','Morales','Madrid','Gotan','34','917636436',to_date('12/12/84','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('50101010D','María','Sanz','Malaga','Ronda','8','956454545',to_date('13/05/67','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('54343433T','Alfonso','Cuevas','Valencia','Valencia','45','937845754',to_date('18/07/68','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('57632786G','Susana','Moral','Guadalajara','Gran Vía','35','915762646',to_date('17/08/75','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('63256769H','José','Dorado','Sevilla','Al Andalus','27','945685548',to_date('12/04/78','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('63456432G','Esther','Barahona','Valencia','Valencia','123','935476548',to_date('24/06/79','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('64329354E','Cristina','Santos','Madrid','Evaristo','1','912376475',to_date('18/10/67','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('64423568C','Rocío','García','Madrid','Plaza de España','89','912347890',to_date('12/10/72','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('76347852I','Marta','Canton','Huelva','Flor','56','967764435',to_date('25/04/78','DD/MM/RR'),'0');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('76453435G','Joaquín','Carmona','Valencia','Caracas','12','937634566',to_date('17/04/75','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('76529637F','Rodolfo','Sanz','Madrid','Monasterio','88','915643258',to_date('15/12/80','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('76666436D','Gerardo','Prado','Madrid','Del Olmo','145','917643643',to_date('15/06/67','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('84545680F','Daniel','Chavero','Madrid','jázmin','34','917664764',to_date('23/06/67','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('86546543R','Rufino','Mellado','Sevilla','Rufino','45','948765676',to_date('16/04/76','DD/MM/RR'),'1');
Insert into PERSONA (DNI,NOMBRE,APELLIDO,CIUDAD,DIRECCIONCALLE,DIRECCIONNUM,TELEFONO,FECHANACIMIENTO,VARON) values ('86876755F','Clara','Estévez','Madrid','Barco','34','919536754',to_date('23/03/67','DD/MM/RR'),'0');

Insert into PROFESOR (IDPROFESOR,DNI) values ('P101','19191919A');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P102','10210210B');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P117','25252525A');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P202','20220220B');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P203','23232323A');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P204','26262626A');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P303','30303030B');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P304','24242424A');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P415','41515151C');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P500','50101010D');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P600','37634764E');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P777','86876755F');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P888','63256769H');
Insert into PROFESOR (IDPROFESOR,DNI) values ('P999','76347852I');

Insert into ALUMNO (IDALUMNO,DNI) values ('A010101','21212121A');
Insert into ALUMNO (IDALUMNO,DNI) values ('A020202','18181818A');
Insert into ALUMNO (IDALUMNO,DNI) values ('A030303','20202020A');
Insert into ALUMNO (IDALUMNO,DNI) values ('A040404','26262626A');
Insert into ALUMNO (IDALUMNO,DNI) values ('A050505','12456789B');
Insert into ALUMNO (IDALUMNO,DNI) values ('A060606','64423568C');
Insert into ALUMNO (IDALUMNO,DNI) values ('A070707','42456487E');
Insert into ALUMNO (IDALUMNO,DNI) values ('A080808','76529637F');
Insert into ALUMNO (IDALUMNO,DNI) values ('A090909','64329354E');
Insert into ALUMNO (IDALUMNO,DNI) values ('A101010','02852373F');
Insert into ALUMNO (IDALUMNO,DNI) values ('A121212','16161616A');
Insert into ALUMNO (IDALUMNO,DNI) values ('A122143','21123124R');
Insert into ALUMNO (IDALUMNO,DNI) values ('A131313','17171717A');
Insert into ALUMNO (IDALUMNO,DNI) values ('A232358','07634664I');
Insert into ALUMNO (IDALUMNO,DNI) values ('A256346','32456245H');
Insert into ALUMNO (IDALUMNO,DNI) values ('A344746','76453435G');
Insert into ALUMNO (IDALUMNO,DNI) values ('A444378','57632786G');
Insert into ALUMNO (IDALUMNO,DNI) values ('A465665','44212123J');
Insert into ALUMNO (IDALUMNO,DNI) values ('A653344','86546543R');
Insert into ALUMNO (IDALUMNO,DNI) values ('A654455','84545680F');
Insert into ALUMNO (IDALUMNO,DNI) values ('A747647','63456432G');
Insert into ALUMNO (IDALUMNO,DNI) values ('A754576','76666436D');
Insert into ALUMNO (IDALUMNO,DNI) values ('A796476','54343433T');
Insert into ALUMNO (IDALUMNO,DNI) values ('A834532','12354123T');

Insert into TITULACION (IDTITULACION,NOMBRE) values ('100007','Físicas');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('100011','Políticas');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('100042','Dirección de empresas');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('100043','Economía');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('110010','Ingeniería Industrial');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('110052','Ingeniero Industrial');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('110053','Informática Sistemas');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('110054','Informática Gestión');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('110055','Ingeniero en Informática');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('120001','Derecho');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('130043','Educación social');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('130047','Psicología');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('130048','Pedagogía');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('130049','Psicopedagogía');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('130061','Trabajo Social');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('130110','Matemáticas');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('140034','Filosofía');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('140044','Historia');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('140045','Filología Hispánica');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('140046','Filología Inglesa');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('150210','Químicas');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('160000','Empresariales');
Insert into TITULACION (IDTITULACION,NOMBRE) values ('170056','Turismo');

Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('000115','Seguridad Vial',                                     '4,5','1','30','P204','170056','1');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('076767','Ampliación de informática gráfica',                  '6','1','658,89','P500','110053','4');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('097343','Algoritmos paralelos',                               '6','1','78','P500','110054','3');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('123536','Ampliación de estructura de computadores',           '4,5','2','68,89','P600','110054','3');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('130113','Programación I',                                     '9','1','60','P101','130110','1');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('130122','Análisis II',                                        '9','2','60','P203','130110','2');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('150212','Química Física',                                     '4,5','2','70','P304','150210','1');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('160002','Contabilidad',                                       '6','1','70','P117','160000','1');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('213123','Automatización industrial',                          '6','2','78,89','P303','110052','2');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('232325','Ampliación de redes',                                '6','1','78,9','P888','110054','3');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('323336','Algoritmos y estructuras de datos II',               '4,5','2','45,67','P500','110053','3');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('324234','Aplicaciones específicas de red',                    '4,5','1','67,67','P888','110054','3');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('455457','Álgebra',                                            '4,5','1','78','P415','110054','2');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('484847','Ampliación de arquitectura de computadores',         '9','2','45,89','P600','110053','3');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('634437','Administración avanzada de sistemas informáticos',   '9','1','110,89','P415','110054','3');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('765376','Antecedentes y evolución de la informática',         '6','2','87,56','P202','110054','2');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('786476','Análisis de datos',                                  '9','2','76,89','P999','110055','2');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('856557','Algoritmos y estructuras de datos I',                '9','2','67','P500','110053','2');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('872464','Ampliación de electrónica',                          '6','1','56,09','P203','110052','2');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('896476','Arquitecturas avanzadas',                            '9','2','34,89','P600','110055','3');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('897478','Ampliación de inteligencia artificial',              '9','2','56,89','P600','110055','4');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('976677','Análisis matemático',                                '6','2','764,89','P203','130110','3');
Insert into ASIGNATURA (IDASIGNATURA,NOMBRE,CREDITOS,CUATRIMESTRE,COSTEBASICO,IDPROFESOR,IDTITULACION,CURSO) values ('986796','Arquitectura e Ingenieria de los computadores',      '6','2','45,89','P600','110055','3');

Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A010101','150212','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A020202','130113','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A020202','150212','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A030303','130113','3');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A030303','130122','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A030303','150212','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A040404','130122','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A121212','000115','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A122143','130113','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A122143','130122','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A122143','976677','3');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A131313','160002','4');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A232358','076767','3');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A232358','323336','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A232358','856557','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A256346','786476','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A256346','896476','4');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A256346','897478','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A256346','986796','3');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A344746','213123','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A344746','872464','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A444378','097343','3');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A444378','123536','4');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A444378','232325','5');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A444378','324234','5');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A444378','455457','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A444378','634437','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A444378','765376','5');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A465665','786476','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A465665','896476','4');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A465665','897478','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A465665','986796','3');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A653344','213123','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A653344','872464','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A654455','097343','3');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A654455','123536','4');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A654455','455457','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A654455','634437','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A747647','213123','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A747647','872464','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A754576','130113','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A754576','130122','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A754576','976677','3');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A796476','130113','1');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A796476','130122','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A796476','976677','3');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A834532','213123','2');
Insert into ALUMNO_ASIGNATURA (IDALUMNO,IDASIGNATURA,NUMEROMATRICULA) values ('A834532','872464','1');

COMMIT;
Run Code Online (Sandbox Code Playgroud)

我创建了一个名为'AsignaturaObj'的对象类型,它映射表'Asignatura'中的行,我想知道是否可以将对象插入表中而不必指定其所有属性:

SET SERVEROUTPUT ON

declare
  contador pls_integer;
begin -- tengo que borrar antiguas dependencias entre objetos para poder recrear los míos
  select count(*) into contador from user_objects where object_name=upper('TablaAsignatura');
  if contador = 1 then
    execute immediate 'drop type TablaAsignatura';
  end if;
  select count(*) into contador from user_objects where object_name=upper('AsignaturaObj');
  if contador = 1 then
    execute immediate 'drop type AsignaturaObj';
  end if;
end;
/

CREATE TYPE AsignaturaObj AS OBJECT(
  idAsignatura    varchar2(6),
  nombre          varchar2(50),
  curso           number(1,0), -- en el original curso y cuatrimestre son varchar2, lo he cambiado por probar
  cuatrimestre    number(1,0),
  créditos        number(3,1),
  coste           number(6,2), -- no necesitamos un número de 16 dígitos como en el original
  idProfesor      varchar2(4),
  idTitulación    varchar2(6)
);
/

CREATE OR REPLACE TYPE TablaAsignatura AS TABLE OF AsignaturaObj;
/

declare
  conjuntoAsignaturas tablaAsignatura := TablaAsignatura();
  miAsignatura        AsignaturaObj;
begin
  conjuntoAsignaturas.extend(3);
  conjuntoAsignaturas(1) := asignaturaObj('222222', 'Pulpos', 2, 1, '4,5', 120, 'Q000', '111111');
  conjuntoAsignaturas(2) := asignaturaObj('222223', 'Pólipos', 2, 1, '3', 80, 'Q000', '222222');
  conjuntoAsignaturas(3) := asignaturaObj('130114', 'Programación II', 2, 1, '9', 80, 'P101', '130110');
  miAsignatura := asignaturaObj('130114', 'Programación II', 2, 1, '9', 80, 'P101', '130110');

  -- THIS WORKS OBVIOUSLY
  insert into asignatura(idAsignatura, nombre, curso, cuatrimestre, creditos, costebasico, idProfesor, idTitulacion)
    values ('130114', 'Programación II', 2, 1, '9', 80, 'P101', '130110'); 

  -- THIS WORKS TOO, BUT IT'S NOT VERY COMFORTABLE TO SPECIFY "OBJECTNAME DOT ATTRIBUTE", NOT ONLY COS THE NUMBER OF ATTRIBUTES CAN BE HIGH BUT ALSO THINK ABOUT USING ANOTHER OBJECT
  insert into asignatura(idAsignatura, nombre, curso, cuatrimestre, creditos, costebasico, idProfesor, idTitulacion)
    values (miAsignatura.idAsignatura, miAsignatura.nombre, miAsignatura.curso, miAsignatura.cuatrimestre, miAsignatura.créditos, miAsignatura.coste, miAsignatura.idProfesor, miAsignatura.idTitulación);*/

  -- BUT THIS DOES NOT :(
  insert into asignatura(idAsignatura, nombre, curso, cuatrimestre, creditos, costebasico, idProfesor, idTitulacion)
    values (miAsignatura.*);

end;
/

--select * from asignatura where idtitulacion = '130110';

rollback;
Run Code Online (Sandbox Code Playgroud)

请注意,对象字段的顺序和名称与表格中的顺序和名称不完全相同,例如AsignaturaObj.idTitulación(带重音)和asignatura.idTitulacion.

以下代码与@ Alex-Poole关于他自己的回答的评论有关,我的动机是使用FORALL.

declare
  conjuntoAsignaturas tablaAsignatura := TablaAsignatura();
begin
  conjuntoAsignaturas.extend(4);
  conjuntoAsignaturas(1) := asignaturaObj('130114', 'Programación II', 2, 1, '9', 80, 'P101', '130110');
  conjuntoAsignaturas(2) := asignaturaObj('222222', 'Teoría de Compiladores', 2, 1, '4,5', 120, 'Q000', '130110');
  conjuntoAsignaturas(3) := asignaturaObj('222223', 'Pólipos', 2, 1, '3', 80, 'P101', '222222');

  DECLARE
    l_error_count  NUMBER; 
    ex_dml_errors EXCEPTION;
    PRAGMA EXCEPTION_INIT(ex_dml_errors, -24381);
  BEGIN
  forall i in 1 .. conjuntoAsignaturas.count SAVE EXCEPTIONS
    insert into asignatura(idAsignatura, nombre, curso, cuatrimestre, creditos, costebasico, idProfesor, idTitulacion)
      values (TREAT(conjuntoAsignaturas(i) AS AsignaturaObj).idAsignatura,  TREAT(conjuntoAsignaturas(i) AS AsignaturaObj).nombre, 
              TREAT(conjuntoAsignaturas(i) AS AsignaturaObj).curso,         TREAT(conjuntoAsignaturas(i) AS AsignaturaObj).cuatrimestre,  
              TREAT(conjuntoAsignaturas(i) AS AsignaturaObj).créditos,      TREAT(conjuntoAsignaturas(i) AS AsignaturaObj).coste, 
              TREAT(conjuntoAsignaturas(i) AS AsignaturaObj).idProfesor,    TREAT(conjuntoAsignaturas(i) AS AsignaturaObj).idTitulación);
  EXCEPTION
    WHEN ex_dml_errors THEN
      l_error_count := SQL%BULK_EXCEPTIONS.count;
      DBMS_OUTPUT.put_line('Número de errores: ' || l_error_count);
      FOR i IN 1 .. l_error_count LOOP
        DBMS_OUTPUT.put_line('Error: ' || i || 
          ' Índice de error: ' || SQL%BULK_EXCEPTIONS(i).error_index ||
          ' Mensaje: ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE));
      END LOOP;
  END;
end;
/
Run Code Online (Sandbox Code Playgroud)

Ale*_*ole 3

您无法避免在某处引用属性,但可以将它们隐藏在对象内。

\n\n

一种选择是使用一个成员函数,使用引用游标按照属性值在表中出现的顺序返回属性值:

\n\n
CREATE TYPE AsignaturaObj AS OBJECT(\n...\n  MEMBER FUNCTION attrsAsCols RETURN sys_refcursor\n);\n/\n\nCREATE OR REPLACE TYPE BODY AsignaturaObj AS \n  MEMBER FUNCTION attrsAsCols RETURN sys_refcursor IS\n    temp_rc sys_refcursor;\n  BEGIN\n    OPEN temp_rc FOR\n      SELECT SELF.idAsignatura, SELF.nombre, SELF.cr\xc3\xa9ditos, SELF.cuatrimestre,\n        SELF.coste, SELF.idProfesor, SELF.idTitulaci\xc3\xb3n, SELF.curso\n      FROM DUAL;\n    RETURN temp_rc;\n  END attrsAsCols;\nEND;\n/\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后在匿名块中将该引用游标提取到行类型变量中并将其用于插入:

\n\n
declare\n  temp_row asignatura%rowtype;\n  temp_rc sys_refcursor;\n...\nbegin\n...\n  temp_rc := conjuntoAsignaturas(3).attrsAsCols;\n  fetch temp_rc into temp_row;\n\n  insert into asignatura\n  values temp_row;\nend;\n/\n\nanonymous block completed\n\nselect * from asignatura where idtitulacion = '130110';\n\nIDASIGNATURA NOMBRE                                               CREDITOS CUATRIMESTRE COSTEBASICO IDPROFESOR IDTITULACION CURSO\n------------ -------------------------------------------------- ---------- ------------ ----------- ---------- ------------ -----\n130113       Programaci\xc3\xb3n I                                              9 1                     60 P101       130110       1    \n130122       An\xc3\xa1lisis II                                                 9 2                     60 P203       130110       2    \n976677       An\xc3\xa1lisis matem\xc3\xa1tico                                         6 2                 764,89 P203       130110       3    \n130114       Programaci\xc3\xb3n II                                             9 1                     80 P101       130110       2    \n
Run Code Online (Sandbox Code Playgroud)\n\n

当然,这依赖于您的对象将属性按照表定义的正确顺序排列,这使得对象更加复杂;但有点简化了插入。

\n\n

另一种选择是将插入操作封装在成员过程中:

\n\n
CREATE TYPE AsignaturaObj AS OBJECT(\n...\n  MEMBER PROCEDURE doInsert\n);\n/\n\nCREATE OR REPLACE TYPE BODY AsignaturaObj AS \n  MEMBER PROCEDURE doInsert IS\n  BEGIN\n    insert into asignatura(idAsignatura, nombre, curso, cuatrimestre,\n      creditos, costebasico, idProfesor, idTitulacion)\n    values (SELF.idAsignatura, SELF.nombre, SELF.curso, SELF.cuatrimestre,\n      SELF.cr\xc3\xa9ditos, SELF.coste, SELF.idProfesor, SELF.idTitulaci\xc3\xb3n);\n  END doInsert;\nEND;\n/\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后你的插入就变成了:

\n\n
declare\n...\n  conjuntoAsignaturas(3).doInsert;\nend;\n/\n\nanonymous block completed\n\nselect * from asignatura where idtitulacion = '130110';\n\nIDASIGNATURA NOMBRE                                               CREDITOS CUATRIMESTRE COSTEBASICO IDPROFESOR IDTITULACION CURSO\n------------ -------------------------------------------------- ---------- ------------ ----------- ---------- ------------ -----\n130113       Programaci\xc3\xb3n I                                              9 1                     60 P101       130110       1    \n130122       An\xc3\xa1lisis II                                                 9 2                     60 P203       130110       2    \n976677       An\xc3\xa1lisis matem\xc3\xa1tico                                         6 2                 764,89 P203       130110       3    \n130114       Programaci\xc3\xb3n II                                             9 1                     80 P101       130110       2    \n
Run Code Online (Sandbox Code Playgroud)\n\n

这意味着该对象即使不依赖于列顺序,仍然依赖于现有的表。

\n