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

Trigger Oracle Columna actual del FOR EACH ROW

Estas en el tema de Trigger Oracle Columna actual del FOR EACH ROW en el foro de Oracle en Foros del Web. Hola a todos, tiempo que no pasaba por acá. Tengo una duda enorme que me está provocando retrasos en un proyecto, ojalá me puedan ayudar. ...
  #1 (permalink)  
Antiguo 20/11/2014, 08:30
Avatar de PolaNicole  
Fecha de Ingreso: febrero-2013
Ubicación: Chile
Mensajes: 28
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta Trigger Oracle Columna actual del FOR EACH ROW

Hola a todos, tiempo que no pasaba por acá.

Tengo una duda enorme que me está provocando retrasos en un proyecto, ojalá me puedan ayudar.

Necesito obtener la columna que se está ejecutando en un trigger para pasarla a un procedimiento, pero no sé como hacerlo, les dejo un código de ejemplo a ver si me comprenden.

Código SQL:
Ver original
  1. CREATE OR REPLACE TRIGGER  MITIGRESITO
  2. AFTER   INSERT   ON  TABLA_
  3. FOR  EACH  ROW
  4. BEGIN
  5.            MIPROCEDIMIENTO (ROW, NEW.ROW);// supuse que con ROW hacía alusión a la columna por donde va pasando el TRIGGER, pero no :(
  6. END;
[/CODE]


Bueno eso, gracias :)

Última edición por gnzsoloyo; 20/11/2014 a las 13:59
  #2 (permalink)  
Antiguo 20/11/2014, 12:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Trigger Oracle Columna actual del FOR EACH ROW

Cual es el error?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 20/11/2014, 13:15
Avatar de PolaNicole  
Fecha de Ingreso: febrero-2013
Ubicación: Chile
Mensajes: 28
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Trigger Oracle Columna actual del FOR EACH ROW

Hola, el error es:

Código:
PLS-00201: identifier 'ROW' must be declared
  #4 (permalink)  
Antiguo 20/11/2014, 13:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Trigger Oracle Columna actual del FOR EACH ROW

Lo que te dice ese error, es que en la tabla llamada TABLA_ no existe una columna con el nombre ROW

Muestranos la estructura de tu tabla TABLA_


Adicional, te recomiendo que no utilices nombres en ningun objeto de base de datos con palabras reservadas de oracle. Si bien, en algunos casos pareciera no presentar problemas, cuando quieras hacer algunas tareas mas especializadas será un total tormento.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 20/11/2014, 13:41
Avatar de PolaNicole  
Fecha de Ingreso: febrero-2013
Ubicación: Chile
Mensajes: 28
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Trigger Oracle Columna actual del FOR EACH ROW

Es que lo que intento hacer es obtener el nombre de esa columna de una forma genérica, para cualquier tabla con cualquier columna necesito detectar el nombre de la columna para luego pasarlo a un procedimiento, por eso probaba con ROW y no con el nombre de la columna.
No sé si me explico, ejemplo:

Tengo tres tablas, una usuarios, otra sistema y otra color, cada una de esas tablas tiene diferentes columnas,
la de usuario tiene: nombre, edad, direccion;
la tabla sistema tiene: nombre_sistema, servidor;
y la tabla color tiene las columnas: nombre_color, cod_rgb, color_similar, familia_color

Por lo tanto éste trigger debería servirme para cualquiera de estas tablas, por lo que necesito tomar el valor de la columna sin definirlo.

A ver, cada vez me enredo más jaja, lo que pasa es que estoy haciendo un sistema en php que crea trigger para una tabla definida por el usuario, el sistema despliega todas las tablas existentes y el usuario selecciona una para crear el trigger, por lo tanto tomo el valor y creo la consulta (trigger) que hará otras cosas xD
  #6 (permalink)  
Antiguo 20/11/2014, 14:24
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Trigger Oracle Columna actual del FOR EACH ROW

Creo que esto no es posible hacerlo como lo planteas.
Si asi lo quieres, debes hacer un trigger por cada tabla.

Para hacerlo un poco mas dinamico, hay unas pseudoculumnas llamadas INSERTING o UPDATING que si soportan varios eventos en un mismo trigger.

Mira estos enlaces:
http://viralpatel.net/blogs/compound...orial-example/
http://www.dbanotes.com/database-dev...in-oracle-11g/
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 20/11/2014, 16:04
Avatar de PolaNicole  
Fecha de Ingreso: febrero-2013
Ubicación: Chile
Mensajes: 28
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Trigger Oracle Columna actual del FOR EACH ROW

Justo eso estaba mirando, pero no me sirve parece xD
Ya que no se puede, estaba tratando de hacer algo así

Código:
FOR i IN 0 .. CONT
         LOOP
            columnas[i]:= SELECT COLUMN_NAME from USER_TAB_COLUMNS where TABLE_NAME='TABLA';
         END LOOP;
Pero ¿cómo hago para que ingresar sólo un valor a mi arreglo? ¿existe alguna forma?

A todo ésto gracias por tu ayuda :)
  #8 (permalink)  
Antiguo 20/11/2014, 16:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Trigger Oracle Columna actual del FOR EACH ROW

Pruebalo de esta forma:

Código SQL:
Ver original
  1. i := 0;
  2. FOR cur IN (SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME='TABLA')
  3. LOOP
  4. columnas[i] := cur.column_name;
  5. i := i + 1;
  6. END LOOP;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 20/11/2014, 16:32
Avatar de PolaNicole  
Fecha de Ingreso: febrero-2013
Ubicación: Chile
Mensajes: 28
Antigüedad: 11 años, 9 meses
Puntos: 0
Sonrisa Respuesta: Trigger Oracle Columna actual del FOR EACH ROW

Genial! pero hay que cambiar los [] por ()

Muchas gracias por tu ayuda
  #10 (permalink)  
Antiguo 21/11/2014, 14:52
Avatar de PolaNicole  
Fecha de Ingreso: febrero-2013
Ubicación: Chile
Mensajes: 28
Antigüedad: 11 años, 9 meses
Puntos: 0
Hacer un select variable into variable2

Hola todos otra vez, como el título dice, necesito hacer un select a un campo el que se lo paso a través de una variable, estuve buscando por internet y en el foro y lo estaba haciendo de la siguiente forma:
Código SQL:
Ver original
  1. EXECUTE immediate   'SELECT ' || columnas(i) || ' INTO ' || v_new || ' FROM TABLA WHERE ID = ' pk_valor ';
Ésto lo hago dentro de un trigger, y el arreglo columnas(i) contiene los nombres de las columnas de una tabla, pero al ejecutar el trigger (en una inserción) me tira el error de que falta una expresión y no sé cuál es, llevo muchas horas en
  #11 (permalink)  
Antiguo 21/11/2014, 14:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Trigger Oracle Columna actual del FOR EACH ROW

No abras un hilo nuevo para continuar con un desarrollo. Continúa en el mismo...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 22/11/2014, 16:23
Avatar de PolaNicole  
Fecha de Ingreso: febrero-2013
Ubicación: Chile
Mensajes: 28
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Trigger Oracle Columna actual del FOR EACH ROW

Es que no es el mismo tema, es algo distinto

Etiquetas: select, tabla, trigger, variable
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 09:11.