Definir procedimiento dentro de package

Uso oracle10g express edition, con el cual me estan enseñando a usar packages.
Solamente debo insertar información dentro de las tablas, mediante packages,
yo lo hice así:
CREATE TABLE rentacar(rolemp varchar2(15)PRIMARY KEY, nombre varchar2(30), direccion varchar2(30), telefono varchar2(15), email varchar2(30));
CREATE TABLE cliente (rutc varchar2(15)PRIMARY KEY, nombre varchar2(30), direccion varchar2(30), telefono varchar2(30), email varchar2(30));
CREATE TABLE trabajador(rutt varchar2(15)PRIMARY KEY, nombre varchar2(30), direccion varchar2(30), telefono varchar2(30), rolemp varchar2(15),FOREIGN KEY(rolemp)REFERENCES rentacar);
CREATE TABLE vehiculo(patente varchar2(10)PRIMARY KEY, marca varchar2(30), modelo varchar2(30), rolemp varchar2(15),FOREIGN KEY(rolemp)REFERENCES rentacar);
CREATE TABLE caracteristicas(patente varchar2(10),color varchar2(30), audio varchar2(30), traccion varchar2(30), precioDiario number, FOREIGN KEY(patente)REFERENCES vehiculo);
CREATE TABLE contrato(rutc varchar2(15), rutt varchar2(15),patente varchar2(10), fechaInicio varchar2(20), fechaDevolucion varchar2(20),FOREIGN KEY(rutc)REFERENCES cliente,FOREIGN KEY(rutt)REFERENCES trabajador,FOREIGN KEY(patente)REFERENCES vehiculo);
-- CABECERA
CREATE OR REPLACE PACKAGE insertarInformacion AS
PROCEDURE insertarRentacar(in_rentacar IN rentacar%ROWTYPE);
PROCEDURE insertarCliente(in_cliente IN cliente%ROWTYPE);
PROCEDURE insertarTrabajador(in_trabajador IN trabajador%ROWTYPE);
PROCEDURE insertarVehiculo(in_vehiculo IN vehiculo%ROWTYPE);
PROCEDURE insertarCaracteristicas(in_caracteristicas caracteristicas%ROWTYPE);
PROCEDURE insertarContrato(in_contrato IN contrato%ROWTYPE);
END insertarInformacion;
-- CUERPO
CREATE OR REPLACE PACKAGE BODY insertarInformacion AS
PROCEDURE insertarRentacar(in_rentacar IN rentacar%ROWTYPE)IS
BEGIN
INSERT INTO rentacar VALUES(in_rentacar.rol, in_rentacar.nombre, in_rentacar.direccion, in_rentacar.telefono, in_rentacar.email);
END insertarRentacar;
PROCEDURE insertarCliente(in_cliente IN cliente%ROWTYPE)IS
BEGIN
INSERT INTO cliente VALUES(in_cliente.rutc, in_cliente.nombre, in_cliente.direccion, in_cliente.telefono, in_cliente.email);
END insertarCliente;
PROCEDURE insertarTrabajador(in_trabajador IN trabajador%ROWTYPE)IS
BEGIN
INSERT INTO trabajador VALUES(in_trabajador.rutt, in_trabajador.nombre, in_trabajador.direccion, in_trabajador.telefono, in_trabajador.rolemp);
END insertarTrabajador;
PROCEDURE insertarVehiculo(in_vehiculo IN vehiculo%ROWTYPE)IS
BEGIN
INSERT INTO vehiculo VALUES(in_vehiculo.patente, in_vehiculo.marca, in_vehiculo.modelo, in_vehiculo.rolemp);
END insertarVehiculo;
PROCEDURE insertarCaracteristicas(in_caracteristicas caracteristicas%ROWTYPE)IS
BEGIN
INSERT INTO caracteristicas VALUES(in_caracteristicas.patente, in_caracteristicas.color, in_caracteristicas.audio, in_caracteristicas.traccion, in_caracteristicas.precioDiario);
END insertarCaracteristicas;
PROCEDURE insertarContrato(in_contrato IN contrato%ROWTYPE)IS
BEGIN
INSERT INTO contrato VALUES(in_contrato.rutc, in_contrato.rutt, in_contrato.codigo, in_contrato.patente, in_contrato.fechaInicio, in_contrato.fechaDevolucion);
END insertarContrato;
END insertarInformacion;
Al crear las tablas, y al ejecutar la cabecera del package no tengo problemas, pero al ejecutar el cuerpo del package (selecciono desde -- CUERPO hasta el final del bloque) me sale el siguiente error:
'ERROR en línea 25: PL/SQL: SQL Statement ignored'
Revise la linea 25 pero no encuentro el error :S
ojala me puedas ayudar con eso =D
de

1 Respuesta

Respuesta
1
Tenias errores en la codificación ... Te paso como debes de hacerlo he indicando los errores que tenias ...
NOTA : Se supone que las TABLAS están bien definidas (con las columnas adecuadas).
CREATE OR REPLACE PACKAGE insertarInformacion AS
PROCEDURE insertarRentacar(in_rentacar IN rentacar%ROWTYPE);
PROCEDURE insertarCliente(in_cliente IN cliente%ROWTYPE);
PROCEDURE insertarTrabajador(in_trabajador IN trabajador%ROWTYPE);
PROCEDURE insertarVehiculo(in_vehiculo IN vehiculo%ROWTYPE);
PROCEDURE insertarCaracteristicas(in_caracteristicas caracteristicas%ROWTYPE);
PROCEDURE insertarContrato(in_contrato IN contrato%ROWTYPE);
END insertarInformacion;
/
CREATE OR REPLACE PACKAGE BODY insertarInformacion AS
PROCEDURE insertarRentacar(in_rentacar IN rentacar%ROWTYPE)IS
BEGIN
INSERT INTO rentacar VALUES(in_rentacar.rolemp, in_rentacar.nombre, in_rentacar.direccion, in_rentacar.telefono, in_rentacar.email);
END insertarRentacar;
PROCEDURE insertarCliente(in_cliente IN cliente%ROWTYPE)IS
BEGIN
INSERT INTO cliente VALUES(in_cliente.rutc, in_cliente.nombre, in_cliente.direccion, in_cliente.telefono, in_cliente.email);
END insertarCliente;
PROCEDURE insertarTrabajador(in_trabajador IN trabajador%ROWTYPE)IS
BEGIN
INSERT INTO trabajador VALUES(in_trabajador.rutt, in_trabajador.nombre, in_trabajador.direccion, in_trabajador.telefono, in_trabajador.rolemp);
END insertarTrabajador;
PROCEDURE insertarVehiculo(in_vehiculo IN vehiculo%ROWTYPE)IS
BEGIN
INSERT INTO vehiculo VALUES(in_vehiculo.patente, in_vehiculo.marca, in_vehiculo.modelo, in_vehiculo.rolemp);
END insertarVehiculo;
PROCEDURE insertarCaracteristicas(in_caracteristicas caracteristicas%ROWTYPE)IS
BEGIN
INSERT INTO caracteristicas VALUES(in_caracteristicas.patente, in_caracteristicas.color, in_caracteristicas.audio, in_caracteristicas.traccion, in_caracteristicas.precioDiario);
END insertarCaracteristicas;
PROCEDURE insertarContrato(in_contrato IN contrato%ROWTYPE)IS
BEGIN
INSERT INTO contrato VALUES(in_contrato.rutc, in_contrato.rutt,
--, in_contrato.codigo,
in_contrato.patente, in_contrato.fechaInicio, in_contrato.fechaDevolucion);
END insertarContrato;
END insertarInformacion;
/
Lo marcado en 'negrita' eran errores de nombre de columnas y el que además lo añado como comentario, es una columna que no está definida en la tabla!
muchas gracias por tu respuesta =D
Me da la impresin de que a ojos expertos como los tuyos, el error
Fue muy fácil de encontrar, pero conmigo no hubo caso xD
muchas gracias nuevamente =D
Adiós

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas