Oracle - Consulta breve

 
Vista:
sin imagen de perfil

Consulta breve

Publicado por snakechaos (3 intervenciones) el 27/06/2014 09:42:41
Hola buenas tardes/días/noches depende de la hora.

Resulta que mi consulta va por el lado de que no se como hacer lo que detallare a continuación:

(espero me entiendan)

tengo una tabla cualquiera:

//creo la tabla
CREATE TABLE Prueba(
id_prueba INT NOT NULL,
nombre VARCHAR2(10));

//asigno la PK
ALTER TABLE Prueba ADD CONSTRAINT PK_id_prueba
PRIMARY KEY(id_prueba);

//realizo una secuencia
CREATE SEQUENCE id_prueba
INCREMENT BY 1
START WITH 1;

//creo un trigger para la secuencia
CREATE OR REPLACE TRIGGER Trigger_id_prueba
BEFORE INSERT ON Prueba
FOR EACH ROW
BEGIN
IF :new.id_prueba IS NULL THEN
select id_prueba.NextVal
into :new.id_rueba
from Dual;
END IF;
END;

//ahora mi duda/consulta/pregunta:
Como realizo el procedimiento almacenado para ingresar los datos?

no se como se realiza para poder insertar el trigger de la secuencia

CREATE OR REPLACE PROCEDURE insert_prueba
(nombre IN VARCHAR2)
AS
BEGIN

INSERT INTO prueba VALUES(nombre);

END;

luego de crear el trigger me da el sgte error :

Warning: execution completed with warning
PROCEDURE insert_prueba Compiled.
y por consiguiente no puedo usar el execute.

cabe destacar que es solo un ejemplo,para un trabajo que debo hacer(necesito hacer los proc de insert, update y delete, pero no entiendo el tema del trigger)

Saludos y gracias por leer.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Consulta breve

Publicado por Rafael (328 intervenciones) el 27/06/2014 15:42:33
A ver el campo del ID lo estas calculando ... por buenas practicas en la sentencia INSERT deberias de declarar el nombre de los campos que vas a usar... en este caso no lo haces y tienes 2 campos y solo pasas un valor...

Luego el error es lógico por lo tanto para corregirlo declara el campo a modificar ...

1
2
3
4
5
6
7
8
CREATE OR REPLACE PROCEDURE insert_prueba
(vNombreIN VARCHAR2)
AS
BEGIN
 
INSERT INTO prueba (nombre) VALUES( vNombre);
 
END;

Y usa nsmbres distintos para las variables por limpieza, orden y que no falle...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta breve

Publicado por snakechaos (3 intervenciones) el 01/07/2014 09:06:58
llevo mas de una semana en lo mismo :/ no funciona nada de lo que he visto en internet :/ ya no se que hacer..

Tu respuesta no me sirvio gracias igual.

(el id se inserta con el trigger, pero no se como hacer el procedimiento para insertar junto con el trigger del id :/ )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta breve

Publicado por ramironikolas (35 intervenciones) el 02/07/2014 14:25:21
No se entiende bien que estas tratando de hacer, pero si tu objetivo es crear un procedure que te permita ingresar un registro en una tabla cuya clave principal esta creada en base al patrón de "clave subrogada o sustituta" y gobernada por una secuencia, no veo la necesidad de crear un trigger, solo con crear un procedimiento como el que te adjunto sería suficiente.

CREATE OR REPLACE PROCEDURE INSERT_PRUEBA (NOMBRE IN VARCHAR2) AS
BEGIN
INSERT INTO PRUEBA(ID_PRUEBA, NOMBRE) VALUES(ID_PRUEBA.NEXTVAL, NOMBRE);
END;

Por otro lado algunas consideraciones a tener en cuenta cuando hagas una consulta:
- Trata de explicar con palabras que es lo que tratas de hacer, ya que tratar de explicar algo solo con el código muchas veces es confuso, es decir podrías estar adjuntando un codigo que compile o ejecute bien pero no haga lo que debe hacer y aqui que quien responde tiene que tratar de inferir lo que se trata de lograr con él.
- Cuando digas que tienes un error o que algo no te sirve, por favor, trata de postear el error o decir porque no te sirvió la respuesta para así poder ir encotrando entre todos el camino o la solución.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta breve

Publicado por snakechaos (3 intervenciones) el 03/07/2014 13:41:29
Gracias por la ayuda compañero.
Logre hacer el trigger junto con el almacenamiento.

La verdad he avanzado bastante en lo que debo hacer (un trabajo)

-Ahora quede estancado con el tema de vistas a ver si me puede alguien ayudar:

Bueno tengo tres tablas
(cabe recalcar que inicie el tema con una duda, y no expuse del principio lo que debo hacer ya que quería intentar hacer lo que máximo solo)

las tablas son:

(solo pondré los atributos, las inserciones y demás lo tengo, y creo me entenderan)

PK =Llave primaria
FK = Llave foranea

table Persona
id int PK,
nombre varchar, apellido varchar, rut varchar, direccion varchar, telefono varchar

table Departamento
id int PK
nombre varchar,descripcion varchar

table Visitas
id int PK
id_persona FK
id_departamento FK
fecha date


Bueno el punto es que debo crear 2 vistas, copiare textual lo que me piden, ya que ni yo entiendo mucho

Se pide una vista historial_visitas la cual permita obtener las distintas visitas desarrolladas.
Y otra llamada visitas_promedio que muestre las visitas promedio mensual del año en curso.

Bueno eso es, toda ayuda consejo es bien recibido.

Saludos y gracias por leer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta breve

Publicado por ramironikolas (35 intervenciones) el 03/07/2014 16:52:14
El primer ejercicio es muy fácil, te voy a ayudar con el segundo que es algo mas complejo y no se entiende bien la consigna.

Para crear una vista con la cantidad total de visitas al mes sería:

CREATE OR REPLACE VIEW VISITAS_PROMEDIO AS
SELECT TO_CHAR(FECHA,'MONTH') AS MES, COUNT(EXTRACT(MONTH FROM FECHA)) AS "CANTIDAD DE VISITAS"
FROM VISITAS V
WHERE EXTRACT(YEAR FROM FECHA) = EXTRACT(YEAR FROM SYSDATE)
GROUP BY TO_CHAR(FECHA,'MONTH'), EXTRACT(MONTH FROM FECHA)
ORDER BY EXTRACT(MONTH FROM FECHA);

La consigna resulta confusa porque carece de sentido hacer un promedio mensual sobre datos de un solo año, por lo cual la solución que te planteé puede ser correcta, pero sin sentido, o puede que lo que quieran es un promedio diario sobre los datos de un año, pero no me suena.
Cualquier cosa averigua bien que se requiere y postea de nuevo.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar