Me imagino que el trigger se dispara deacuerdo a un evento en una sola tabla.
Y que last_name es una columna de dicha tabla.
Si las veces que se repiten estos condicionales IF(30 o mas) corresponde a la cantidad de columnas que tiene la tabla (Por ejemplo... si comparas
last_name, luego telephone, luego address y todas las comparaciones son sobre una misma tabla) podrías probar haciendo uso de la vista USER_TAB_COLUMNS.
Un ejemplo:
Código SQL:
Ver originalSQL> SELECT column_name FROM user_tab_columns WHERE TABLE_NAME='EMPLOYEES';
COLUMN_NAME
------------------------------
EMPLOYEE_ID
FIRST_NAME
LAST_NAME
EMAIL
PHONE_NUMBER
HIRE_DATE
JOB_ID
SALARY
COMMISSION_PCT
MANAGER_ID
DEPARTMENT_ID
11 filas seleccionadas.
Mira en este
enlace la forma como utilizan los cursores explicitos para almacenar los resultados de una consulta.
Si en un arreglo puedes guardar el resultado de esa consulta, podría haber un loop que recorriera el cursor y aplicara las operaciones que muestras para cada registro encontrado.