Oracle - UPDATE SE QUEDA ESTATICO

   
Vista:

UPDATE SE QUEDA ESTATICO

Publicado por Jacqueline  (1 intervención) el 27/11/2008 16:45:33
Estoy desarrollando un proceso que hace una evaluación de un Pareto para los saldos de una cartera de clientes,
para esto tengo 9 campos en una tabla,

Primer campo ;Id cliente
que es en donde está el orden de los clientes

Segundo campo: codigocliente
que es donde se encuentran los codigos de los clientes

Tercer campo : saldo

Que es donde se encuentra los saldos de los clientes ordenados de mayor a menor

Cuarto campo: Peso
Que es el valor que se obtiene de dividir cada saldo de un cliente entre el total de la suma de los saldos de todos los clientes

Quinto campo: Acumulado1
Que es el campo en donde se obtiene el valor de hacer una suma acumulativa de los pesos,es decir el primero tiene el peso inicial , el segundo
tendría la suma del primer peso mas el segundo y asi consecutivamente

Sexto campo: Pareto1
Que es el campo en donde se hace la logica del pareto ,aquellos clientes que tengan un valor menor o igual a 80% en el campo Acumulado uno obtiene un valor de 80 y aquellos que son mayores de 80
obtienen un valor de 20

Septimo campo : Tipo1
Aca se tiene el tipo de cliente segun el valor obtenido en Pareto1,los que en Pareto 1 tuvieron valores de 80 se les da el tipo cliente premium


Luego viene un segundo analisis sobre los que obtuvieron en Pareto1 el valor de 20, para esto se tiene un nuevo total de los saldos
de los clientes que solo estan con valor 20 en Pareto 1,y entonces en el nuevo campo acumulado 2 se realiza la división entre
el saldo del cliente entre el nuevo total y asi sigue el mismo analisis anterior para el nuevo campo Pareto2, en donde para
los que en Pareto2 obtienen valores de 80 se les da en la columna tipo el nombre de cliente preferente y para los que obtienen el valor de 20 se les da el tipo cliente


Mi problema es que para hacer todo este analisis yo realizo un update a la tabla que tiene estos campos que se llama BDS.T_SALDO_PARETO_ORIG, de esta manera:

/*IDENTIFICANDO A LOS CLIENTES PREMIUM */

update BDS.T_SALDO_PARETO_ORIG t
set (acumulado1,pareto1,tipo)=(select sum(saldo)*100/total,
(case when sum(saldo)*100/total<=80 then 80 else 20 end),
(case when sum(saldo)*100/total<=80 then 'BUEN CLIENTE' else NULL end)
from BDS.T_SALDO_PARETO_ORIG_D where id_cliente<=t.id_cliente);
commit;

/*IDENTIFICANDO A LOS CLIENTES NORMAL Y BASICO: SOLO EVALUAR REGISTROS CON PARETO=20*/

select sum(saldo) into total from BDS.T_SALDO_PARETO_ORIG WHERE PARETO1=20;

update BDS.T_SALDO_PARETO_ORIG t
set (acumulado2,pareto2,tipo)=(select sum(saldo)*100/total,
(case when sum(saldo)*100/total<=80 then 80 else 20 end),
(case when sum(saldo)*100/total<=80 then 'CLIENTE REGULAR' else 'MAL CLIENTE ' end)
from BDS.T_SALDO_PARETO_ORIG_D where id_cliente<=t.id_cliente and pareto1=20),
peso2=saldo*100/total
where pareto1=20;
commit;
---

pero al hacer el update se queda en nada ,es como si se quedara paralizado no avanza por horas, consulté y me dijeron porque como
la tabla se hace update asi mismo puede estar obstruyendose porque lo que hacía antes era desarrollar con 2 objetos de la misma tabla
este update ,pero ahora cree otra tabla identica solo con los valores iniciales de IDCLIENTE,CODIGO,SALDO Y PESO
y dejé el query como está arriba, osea ahora solo la tabla BDS.T_SALDO_PARETO_ORIG debería actualizarse a partir de
BDS.T_SALDO_PARETO_ORIG_D, pero igual sigue de la misma manera, el dba me dice que está como si se hubiera quedado pegado en un datafile
y no hace nada.

Por favor necesito ayuda para resolver este problema lo mas pronto posible, o si existe otra manera de realizar esta evaluación.Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:UPDATE SE QUEDA ESTATICO

Publicado por cacho (1 intervención) el 17/03/2010 15:05:57
Estimados, a pesar de que ha pasado mucho tiempo dejo igual la respuesta para los que tengan el mismo problema o se esten iniciando en esto:

Es sólo error de sintaxis.....deben intentar hacerla de esta manera:

UPDATE modelo_pesca.arte_aparejo
SET ID_ARTE_APAREJO = select o nombre del campo,
ID_PUERTO = select o nombre del campo
WHERE -- Please complete;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar