disparador

ega
21 de Enero del 2005
Hola!Tengo un disparador que me tiene que hacer la suma de todos los usuarios que cogen una actividad pidiendo créditos. Se que tengo que hacerla con un count pero no se si después tengo que utilizar into o as. Al hacerlo en sql-plus con as me deja pero creo q solo la renombro, y luego no puedo utilizar esa variable y la necesito. En mas consultas necesito extraer el valor de un campo de una tabla a una variable y lo hago con into, pero no me funciona. Por ejemplo :
select plazas into Matriculados
from activ
where pide_cr = 'si';
Al hacer esdto en Matriculados se supone que deberia haber extraido el valor que tiene plazas, pero no me funciona. Como lo puedo hacer?
Muchas gracias por la ayuda.

Ega
21 de Enero del 2005
Hola!
Gracias a todos por la ayuda, pero sigo con mi mismo problema, ya que no me deja contar el número de usuarios que estan matriculados en una misma actividad, en un mismo grupo y en el mismo periodo. El problema es que no me los suma. Yo he hecho dentro del disparador una consulta que sería así:
SELECT COUNT(*)into MatriculadosActuales
FROM REALIZAN
WHERE NOM_ACT = ActivInsert AND PERIODO_ACT = PeriodoInsert AND GRUPO_ACT = GrupoInsert;
Muchas gracias de antemano y un saludo

DEMASIADO TARDE
21 de Enero del 2005
NO SE UTILIZA EL COUNT SI NO EL SUM

jc3000
21 de Enero del 2005
¿ que es matriculados ?
¿ por que dices que no te funciona ?
¿ te da error ?
Da mas detalles

ega
21 de Enero del 2005
Hola!
Al hacer un count el valor obtenido quiero pasarlo a una variable por ejemplo:
SELECT COUNT(*) intoMatriculadosActuales
FROM REALIZAN
WHERE NOM_ACT = 'tenis';
Mi problema es que no me almacena nada en MatriculadosActuales y esta seria una variable de tipo number y necesito esta variable para trabajar con ella. Si intento mostrar el valor que tiene la variable MatriculadosActuales me da el siguiente error:
ora- 06512 que es en la linea donde he puesto
RAISE_APPLICATION_ERROR(-20000,'Los matriculados actuales son: ' || MatriculadosActuales);
Sin hacer el count, solamente intentando extraer el valor del campo plazas de la tabla y pasarselo a la variable MaxMatriculados que es del mismo tipo que plazas tampoco me la almacena, como seria en el siguiente ejemplo:
SELECT PLAZAS into MaxMatriculados
FROM ACTIV,REALIZAN
WHERE PIDE_CR='N0' ;
MaxMatriculados seria una variable auxiliar para poder comparar y trabajar con ella, y tendría el mismo valor y seria del mismo tipo que plazas.
Muchas gracias.
Un saludo y si no se entiende bien dimelo por favor.

abouza
21 de Enero del 2005
Hola hola

He estado mirando como funciona el RAISE_APPLICATION_ERROR
He lanzado esta sentencia en el SQL-PLUS
exec RAISE_APPLICATION_ERROR(-20000,'Los matriculados actuales son: ',true);

y me devuelve ...

*
ERROR en línea 1:
ORA-20000: Los matriculados actuales son:
ORA-06512: at line 1

el error 0RA-06512 simplemente indica en que parte has lanzado el RAISE_APPLICATION_ERROR, encima te tiene que salir lo que tu has escrito. Si te sale otra cosa es que tienes un error en el codigo

Saludos

abouza
21 de Enero del 2005
Hola de nuevo,

Prueba esto,

RAISE_APPLICATION_ERROR(-20000,'Los matriculados actuales son: ' || TO_CHAR(nvl(MatriculadosActuales, -1)));

un saludo

abouza
21 de Enero del 2005
Hola EGA,

select plazas into Matriculados
from activ
where pide_cr = 'si';

Si en la tabla ACTIV hay mas de un registro que en el campo PIDE_CR tenga valor 'si', te dara un error TOO_MANY_ROWS, ya que la clausula INTO solo admite un valor, y en el caso de que no encuentre registros te saltara el error NODATAFOUND.

Si en la tabla ACTIV tienes muchos registros con el campo PIDE_CR = 'si' y quieres saber el nº.

SELECT COUNT(*) INTO matriculados
FROM activ
WHERE UPPER(pide_cr)= 'SI'M

Un saludo

JC3000
21 de Enero del 2005
Vamos a ver. Con el RAISE lo que heces es crear y forzar un error en el que tu decides el numero ( Hay un rango ) y su descripción. Basicamente te creas un ORA-XXXXX.
Independientemente de que vaya bien, en cuanto llegue al RAISE, te va a saltar un error y se parará la ejecución..