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

cursores y trigger

Estas en el tema de cursores y trigger en el foro de Oracle en Foros del Web. Hola espero esten bien, disculpen por quitarles algo de su tiempo pero soy nueva en pl y necesito ayuda. Tengo dos tablas, (tabla1 y tabla2) ...
  #1 (permalink)  
Antiguo 29/04/2014, 11:54
Avatar de lawlieth_kain  
Fecha de Ingreso: abril-2014
Mensajes: 19
Antigüedad: 10 años
Puntos: 0
cursores y trigger

Hola espero esten bien, disculpen por quitarles algo de su tiempo pero soy nueva en pl y necesito ayuda. Tengo dos tablas, (tabla1 y tabla2) en tabla uno se encuentran la posicion, nombre, tamaño de cada columna de tabla2 y tabla dos son los datos que el usuario observa en pantalla, lo que necesito hacer es un trigger que realice un alter table a tabla2 cuando se actualice tabla1... alguna sugerencia? no se mucho de esto porfavor ayuda!!!
  #2 (permalink)  
Antiguo 29/04/2014, 11:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: cursores y trigger

Cita:
hacer es un trigger que realice un alter table a tabla2
¿Un ALTER TABLE o un UPDATE?

No deben hacerse operaciones DDL en rutinas lamacenadas, ¿lo tienes claro?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 29/04/2014, 12:15
Avatar de lawlieth_kain  
Fecha de Ingreso: abril-2014
Mensajes: 19
Antigüedad: 10 años
Puntos: 0
Respuesta: cursores y trigger

eske el trigger se activa con un update... lo que necesito es que el trigger actualice los campos de la tabla2 con la informacion de la tabla1, porque al actualisarce tabla1 se debe modificar tabla2 en cuanto a la longitud que establecen en tabla1...

es decir si nombre empleado es varchar de 30
en tabla 1 dira nombre empleado 30
y si en tabla 1 se modifica nombre empleado 60
en tabla 2 el campo de nombre empleado medira 60
y sii solo es 1 ves
pero no se como mandar traer el 60 de tabla 1 para hacer el alter table para tabla 2
ALTER TABLE tTICKET
MODIFY(
Id_Tienda varchar2(4) null,
Id_Fecha date null,
Id_Turno varchar2(1) null,
Codigo_Barras varchar2(13) null,
Venta_Bruta varchar2(13) null);
en ves de ke sea asi
debe ser algo asi
ALTER TABLE tTICKET
MODIFY(
Id_Tienda varchar2(datos de tabla1) null,
Id_Fecha date null,
Id_Turno varchar2(datos de tabla1) null,
Codigo_Barras varchar2(datos de tabla1) null,
Venta_Bruta varchar2(datos de tabla1) null);
pero no se como hacer lo de datos de tabla 1
para poder compararlas y ke me arroje el valor ke tiene para ese campo
porke podria modificarla pero tomaria solo el primer valor
  #4 (permalink)  
Antiguo 29/04/2014, 12:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: cursores y trigger

Estás plantando una idea equivocada. No se deben modificar una estructura dinámicamente, sino que debes analizar el dominio del dato y darle a la columna el tamaño máximo necesario para el peor de todos los casos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 29/04/2014, 12:57
Avatar de lawlieth_kain  
Fecha de Ingreso: abril-2014
Mensajes: 19
Antigüedad: 10 años
Puntos: 0
Respuesta: cursores y trigger

osea ke tabla2 debe en su campo Id_Tienda varchar2(4) entonces plantearse como
Id_Tienda varchar2(500) por decir algo? no se puede modificar la tabla? porque? porque dices que es erroneo? no entiendo comprende soy nueva en esto.
  #6 (permalink)  
Antiguo 29/04/2014, 13:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: cursores y trigger

Cita:
osea ke tabla2 debe en su campo Id_Tienda varchar2(4) entonces plantearse como
Id_Tienda varchar2(500) por decir algo?
Mas o menos, aunque lo que se hace en diseño de datos es estimar la longitud del dato, y luego indicar esa restricción a los programadores para que no permitan que el usuario ingrese cualquier cosa.
A nivel de programación esta es una validación que siempre existe, lo habrás visto en cualquier sitio, ya que no se debe permitir jamás ingresar datos inválidos.
Cita:
no se puede modificar la tabla? porque? porque dices que es erroneo? no entiendo comprende soy nueva en esto.
No se debe modificar una estructura de tablas, a menos que sea por requirimietnos muy específicos, y sólo si es estrictamente necesario.
Un modelo de datos es un modelo físico, Todo lo que pones en esl son estructuras permanentes, y deben responder la las necesidades del sistema que alimentan.
Si permites que una estructura de BBDD se modifique dinámicamente, tarde o temprano perderás el control de la estructura, y tendrás, por ejemplo, backups oinconsistentes con las bases de datos.
Cada vez que modificas una tabla se reescribe completa, afectas los índices, y si está relacionada, esas relaciones deben reescribirse. Estás afectando no sólo la performance del sistema, sino su estabilidad.
Uno de los primeros conceptos que te enseñan cuando estudias es que el modelo físico de datos debe ser:
1) Independiente de la arquitectura de software (sin acoplamiento con la aplicación)
2) Flexible a cualquier consulta (debe responder a cualquier consulta del sistema).
3) Adaptable a cambios de entorno (abstraerse del entorno ).
4) Estable y consistente (protección de consistencia e itegridad de datos).

¿Cuándo se modifica una tabla?
Cuando valores críticos para el sistema son cambiados por el entorno.
Por ejemplo: Si la codificación telefónica pasa de un máximo de siete dígitos urbanos a ocho, eso es un cambio grande. Pero para eso tienes el conocimietno que el sistema telefónico mundial no usa más de catorce dígitos, por lo cual creas la columna directamnete como un VARCHAR2(15) y listo.
Otro caso sería un cambio de codificación postal: de cuatro digitos, a ocho alfanumérico (pasó en Argentina). Eso mofdifica el largo del campo, pero son cambios muy raros, muy poco habituales.
En el caso de los nombres, simplemente la pregutna es: ¿Cuál es el nombre de empresa más largo que conoces? ¿250 caracteres? ¿270?
Bueno, le pones eso.
¿En nombres de personas?
Tal vez 150 o 180 caracteres.
No es tan difícil de ver. Simplemente le pones el dato que requiere ese dominio (universo de represntación de un mismo atributo) y listo.

Pero no dejas que se cambie porque si.

¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 29/04/2014, 14:44
Avatar de lawlieth_kain  
Fecha de Ingreso: abril-2014
Mensajes: 19
Antigüedad: 10 años
Puntos: 0
Respuesta: cursores y trigger

si gracias! me has ayudado por cierto podria preguntarte algo rapido? porque sale el error PL/SQL: ORA-00903: nombre de tabla no válido si la tabla existe y hasta datos tiene?
  #8 (permalink)  
Antiguo 29/04/2014, 14:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: cursores y trigger

Postea la query usada.
Si no vemos lo que escribistees difícil saberlo.
Por otro lado no te olvides que en ciertas instalaciones, Oracle peude se sensible a mayusculas/minusculas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 29/04/2014, 14:55
Avatar de lawlieth_kain  
Fecha de Ingreso: abril-2014
Mensajes: 19
Antigüedad: 10 años
Puntos: 0
Respuesta: cursores y trigger

mira mi codigo es este

Código SQL:
Ver original
  1. DECLARE
  2. id_tabla varchar2(4):='';
  3. nombre_columna varchar2(30):='';
  4. pos_inicial varchar2(4):='';
  5. pos_final varchar2(4):='';
  6. longitud varchar2(4):='';
  7. BEGIN
  8. id_tabla:='1';
  9. nombre_columna :='Id_Tienda';
  10. pos_inicial :='0';
  11. pos_final :='4';
  12. longitud :='5';
  13. MODIFICAR(id_tabla, nombre_columna, pos_inicial, pos_final, longitud);
  14. commit;
  15. END;
  16. /
  17.  
  18. CREATE OR REPLACE PROCEDURE MODIFICAR (id_tabla varchar2 , nombre_columna varchar2, pos_inicial varchar2, pos_final varchar2, longitud varchar2) IS
  19.    v_id varchar2(4):= id_tabla;
  20.    v_nom_column varchar2(30):= nombre_columna;
  21.    v_posini varchar2(4):= pos_inicial;
  22.    v_posfn varchar2(4):= pos_final;
  23.    v_long varchar2(4):= longitud;
  24.    v_tablatam Ttam_tic%ROWTYPE;
  25.  
  26. BEGIN
  27.    
  28.     UPDATE TABLE Ttam_tic
  29.     SET (v_id, v_nom_column, v_posini, v_posfn, v_long)
  30.     WHERE (v_tablatam.Id= v_indice) AND (v_tablatam.nombre_columna = v_nom_campo) ;
  31.        
  32. END MODIFICAR;

Última edición por gnzsoloyo; 29/04/2014 a las 15:04
  #10 (permalink)  
Antiguo 29/04/2014, 14:55
Avatar de lawlieth_kain  
Fecha de Ingreso: abril-2014
Mensajes: 19
Antigüedad: 10 años
Puntos: 0
Respuesta: cursores y trigger

no se si este bien o no, aun me cuesta pero espero me puedas ayudar. Y gracias de antemano
  #11 (permalink)  
Antiguo 29/04/2014, 16:18
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: cursores y trigger

Hola lawlieth_kain

Esta parte:
UPDATE TABLE Ttam_tic
esta mal.
Debe ser
UPDATE Ttam_tic

Sobra la palabra TABLE en la sentencia UPDATE.

Con respecto a tu pregunta inicial, estoy deacuerdo con gnzsoloyo. Ademas para eso existe el tipo de dato VARCHAR que significa char de dimension variable. lo que indica que una cadena VARCHAR2(10) puede ser desde 1 hasta 10 de forma variable. No reserva el espacio completo para la cadena. Mi recomendación es que utilices un espacio mas grande y no te preocupes por volver a calcular eso. Es muchisimo mas costoso para la base de datos.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #12 (permalink)  
Antiguo 29/04/2014, 17:24
Avatar de lawlieth_kain  
Fecha de Ingreso: abril-2014
Mensajes: 19
Antigüedad: 10 años
Puntos: 0
Respuesta: cursores y trigger

MUCHAS GRACIAS huesos52!!!!!!!

Me sirvio realmente bastante jeee en verdad gracias :)

Etiquetas: cursores, tabla, 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 18:11.