Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Problema con Oracle y un trigger

Estas en el tema de Problema con Oracle y un trigger en el foro de Oracle en Foros del Web. Hola, a ver si me podeis echar una manita, porque estoy ya estresado porque no se donde falla. Tengo el siguiente TRIGGER: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 26/05/2010, 08:54
 
Fecha de Ingreso: marzo-2010
Ubicación: Sevilla
Mensajes: 11
Antigüedad: 14 años, 9 meses
Puntos: 1
Problema con Oracle y un trigger

Hola, a ver si me podeis echar una manita, porque estoy ya estresado porque no se donde falla. Tengo el siguiente TRIGGER:
Código SQL:
Ver original
  1. CREATE OR REPLACE TRIGGER  "Genera_factura_AFTER"
  2.     AFTER
  3.     INSERT OR UPDATE ON "Consumo"
  4. DECLARE
  5.     var_serie_anual VARCHAR2(150);
  6.     var_anio INTEGER := "RI_G_f".NewG_f."Anio";
  7.     var_mes VARCHAR2(10) := "RI_G_f".NewG_f."Mes";
  8.     var_consumo NUMBER(10,2) := "RI_G_f".NewG_f."Consumo";
  9.     var_id_abastecimiento NUMBER := "RI_G_f".NewG_f."Id_abastecimiento";
  10.     var_fecha_emision DATE;
  11.     var_estado VARCHAR2(9) := 'No pagada';
  12.     var_importe_total NUMBER(10,2);
  13.     var_precio_m3 NUMBER(10,2);
  14.     var_canon NUMBER(10,2);
  15.     var_cargo_exceso NUMBER(1,2);
  16.     var_consum_max NUMBER(6,2);
  17.     var_iva NUMBER(1,2);
  18.     var_importe_total_iva NUMBER(10,2);
  19.     var_exceso NUMBER(10,2);
  20. BEGIN
  21.     SELECT (to_char(sysdate,'YYYY') ||'/'|| "SERIE_ANUAL_SEQ".NEXTVAL) INTO var_serie_anual FROM DUAL; 
  22.     SELECT to_date(to_char(sysdate, 'dd/mm/yyyy')) INTO var_fecha_emision FROM DUAL;
  23.         SELECT PA."Precio_m3", PA."Canon", PA."Recargo_exceso", PA."Consumo_maximo"
  24.     INTO var_precio_m3, var_canon, var_cargo_exceso, var_consum_max
  25.     FROM "Contratacion-tarifa" CT INNER JOIN "Punto_abas-contrato" PA INNER JOIN "Tarifa" TA
  26.         WHERE TA."Id_tarifa"=CT."Id_tarifa" AND TA."Anio"=CT."Anio" AND CT."Id_contrato"=PA."Id_contrato" AND PA."Id_abastecimiento"=var_id_abastecimiento;
  27.     SELECT "IVA" INTO var_iva FROM "Punto_abastecimiento" PA WHERE PA."Id_abastecimiento"=var_id_abastecimiento;
  28.     IF(var_consumo>var_consumo_max)
  29.     THEN
  30.         var_exceso:=var_consumo - var_consumo_max;
  31.     ELSE
  32.         var_exceso:=0;
  33.     END IF;
  34.     var_importe_total:= var_canon+(var_consumo*var_precio_m3)+(var_exceso*var_cargo_exeso);
  35.     var_importe_total_iva:= var_importe_total*(1+iva);
  36.    
  37.     INSERT INTO "Factura" ("Serie_anual","Anio", "Mes", "Id_abastecimiento",
  38.                         "Fecha_emision", "Situacion_factura", "Importe_total",
  39.                         "IVA_aplicado", "Importe_total_con_IVA") VALUES (var_serie_anual,
  40.                         var_anio, var_mes, var_id_abastecimiento, var_fecha_emision,
  41.                         var_estado, var_importe_total, var_iva, var_importe_total_iva);
  42.                        
  43. END;

Y el compilador del Oracle 10g me dice lo siguiente:
Código PHP:
23    9    PL/SQLORA-00905falta una palabra clave
20    9    PL
/SQLSQL Statement ignored 
¿Cómo lo podría solucionar? Porque según pone es la lina 20 y la linea 20 es el BEGIN...

Gracias de antemano ;)
  #2 (permalink)  
Antiguo 26/05/2010, 11:06
Avatar de xf_corp  
Fecha de Ingreso: mayo-2008
Mensajes: 57
Antigüedad: 16 años, 7 meses
Puntos: 3
Respuesta: Problema con Oracle y un trigger

Hola,

Una pregunta, de donde obtienes estos valores:

"RI_G_f".NewG_f."Anio";
"RI_G_f".NewG_f."Mes";
"RI_G_f".NewG_f."Consumo";
"RI_G_f".NewG_f."Id_abastecimiento";

Saludos.
  #3 (permalink)  
Antiguo 26/05/2010, 12:04
 
Fecha de Ingreso: marzo-2010
Ubicación: Sevilla
Mensajes: 11
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Problema con Oracle y un trigger

Cita:
Iniciado por xf_corp Ver Mensaje
Hola,

Una pregunta, de donde obtienes estos valores:

"RI_G_f".NewG_f."Anio";
"RI_G_f".NewG_f."Mes";
"RI_G_f".NewG_f."Consumo";
"RI_G_f".NewG_f."Id_abastecimiento";

Saludos.
De un paquete antes declarado
  #4 (permalink)  
Antiguo 26/05/2010, 14:58
Avatar de xf_corp  
Fecha de Ingreso: mayo-2008
Mensajes: 57
Antigüedad: 16 años, 7 meses
Puntos: 3
Respuesta: Problema con Oracle y un trigger

Valida el INNER JOIN, en la sentencia:

SELECT PA."Precio_m3", PA."Canon", PA."Recargo_exceso", PA."Consumo_maximo"
INTO var_precio_m3, var_canon, var_cargo_exceso, var_consum_max
FROM "Contratacion-tarifa" CT INNER JOIN "Punto_abas-contrato" PA INNER JOIN "Tarifa" TA
WHERE TA."Id_tarifa"=CT."Id_tarifa" AND TA."Anio"=CT."Anio" AND CT."Id_contrato"=PA."Id_contrato" AND PA."Id_abastecimiento"=var_id_abastecimiento;


La palabra clave es ON, al definir el JOIN de las tablas.

Valida primero el SELECT, y luego integra el SELECT INTO a tu trigger.

Etiquetas: trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:28.