› Foros › Off-Topic › Miscelánea
CREATE OR REPLACE TRIGGER comprarJugador
AFTER INSERT
ON jugadores
FOR EACH ROW
BEGIN
sDescripcion VARCHAR2(200);
sDniJugador jugadores.dni%type;
sNombreEquipo equipos.nombre%type;
sDescripcion := "Vendido el jugador " || sDniJugador || " por el equipo " || sNombreEquipo;
IF noticias NOT EXISTS
CREATE TABLE noticias
(
fecha DATE NOT NULL,
descripcion VARCHAR2(200) NOT NULL
);
INSERT INTO noticias VALUES (SYSDATE, sDescripcion);
ELSIF
INSERT INTO noticias VALUES (SYSDATE, sDescripcion);
END;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error Procedimiento en Trigger');
END comprarJugador;
DjTemplar escribió:supongo que tendras que hacer una consulta sobre la tabla jugadores y meter los resultados en variables?
No entiendo como sabes hacer todo eso y preguntas esto xD
Dasten escribió:DjTemplar escribió:supongo que tendras que hacer una consulta sobre la tabla jugadores y meter los resultados en variables?
No entiendo como sabes hacer todo eso y preguntas esto xD
No es una consulta en sí, es un "Disparador" (Trigger) que hace que cuando alguien inserte un jugador en la tabla Jugadores se active. Cuando este se active insertara en una tabla Noticias que " Se ha insertado X Jugador en Y equipo", y claro, hay que comprobar que la tabla Noticias este creada.
El problema no viene de como insertar o no, sino que en la tabla Noticias tengo que pasar el nombre y el equipo del jugador que se ha insertado, y debe de ser automatico por lo que tengo que sacar esos datos de la Select que hace la persona que inserta en la tabla jugadores, y no se como hacerlo.
No se si me explico.. xD
CREATE OR REPLACE TRIGGER comprarJugador
AFTER INSERT
ON jugadores
FOR EACH ROW
DECLARE
sDescripcion VARCHAR2(200);
BEGIN
sDescripcion := "Vendido el jugador " || :old.dni || " por el equipo " || :old.nombre;
IF NOT EXISTS (SELECT * FROM noticias) THEN
CREATE TABLE noticias
(
fecha DATE NOT NULL,
descripcion VARCHAR2(200) NOT NULL
);
INSERT INTO noticias VALUES (SYSDATE, sDescripcion);
ELSIF
INSERT INTO noticias VALUES (SYSDATE, sDescripcion);
END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error en Trigger');
END comprarJugador;
CREATE OR REPLACE TRIGGER comprarJugador
AFTER INSERT
ON jugadores
FOR EACH ROW
DECLARE
sDescripcion VARCHAR2(200);
Existe as number;
BEGIN
sDescripcion := "Vendido el jugador " || :old.dni || " por el equipo " || :old.nombre;
Select count(1) into Existe from all_tables where table_name = 'noticias';
If existe > 1 then
EXECUTE IMMEDIATE (CREATE TABLE noticias (fecha as DATE NOT NULL, descripcion as VARCHAR2(200) NOT NULL));
INSERT INTO noticias VALUES (SYSDATE, sDescripcion);
ELSIF
INSERT INTO noticias VALUES (SYSDATE, sDescripcion);
END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error en Trigger');
END comprarJugador;
Delian escribió:CREATE OR REPLACE TRIGGER comprarJugador
AFTER INSERT
ON jugadores
FOR EACH ROW
DECLARE
sDescripcion VARCHAR2(200);
Existe as number;
BEGIN
sDescripcion := "Vendido el jugador " || :old.dni || " por el equipo " || :old.nombre;
Select count(1) into Existe from all_tables where table_name = 'noticias';
If existe > 1 then
EXECUTE IMMEDIATE (CREATE TABLE noticias (fecha as DATE NOT NULL, descripcion as VARCHAR2(200) NOT NULL));
INSERT INTO noticias VALUES (SYSDATE, sDescripcion);
ELSIF
INSERT INTO noticias VALUES (SYSDATE, sDescripcion);
END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error en Trigger');
END comprarJugador;
EXECUTE IMMEDIATE (CREATE TABLE noticias (fecha as DATE NOT NULL, descripcion as VARCHAR2(200) NOT NULL));
Compilation errors for TRIGGER TEMA6.COMPRARJUGADOR
Error: PLS-00103: Se ha encontrado el símbolo "CREATE" cuando se esperaba uno de los siguientes:
begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
Line: 14
Text: CREATE TABLE noticias