Cálculo de valores máximos URGENTE
Buenas
Mi problema es el siguiente, poseo una tabla con un único registro con 170 campos y necesito calcular el máximo de todos ellos. he intentado hacerlo mediante un pl/sql que crea dinámicamente la consulta del tipo:
'select to_char(decode(sign(campo1-campo2),campo1,decode(sign(campo2-campo3),1,campo2.....) from tabla'.
el problema está en que oracle no me admite variables cuyo número de caracteres supere los 999 y ésta los supera con creces.
Mi pregunta es la siguiente:
-existe una función del tipo max(campo1,campo2,...) para calcular el máximo o bien existe alguna forma de trasponer la tabla para que interprete los valores de campos como de la misma columna?.
Muchas gracias por anticipado y un cordial saludo,
César
Mi problema es el siguiente, poseo una tabla con un único registro con 170 campos y necesito calcular el máximo de todos ellos. he intentado hacerlo mediante un pl/sql que crea dinámicamente la consulta del tipo:
'select to_char(decode(sign(campo1-campo2),campo1,decode(sign(campo2-campo3),1,campo2.....) from tabla'.
el problema está en que oracle no me admite variables cuyo número de caracteres supere los 999 y ésta los supera con creces.
Mi pregunta es la siguiente:
-existe una función del tipo max(campo1,campo2,...) para calcular el máximo o bien existe alguna forma de trasponer la tabla para que interprete los valores de campos como de la misma columna?.
Muchas gracias por anticipado y un cordial saludo,
César
No, que yo sepa no existe una funciòn de esas caracterìsticas...lo que podes hacer es una consulta con UNIONS de los campos:
Select campo1 cam
from tabla
union
select campo2 cam
from tabla
union
....
select campoN
from tabla
a esto lo encerras ente parentesis y buscas el mà ximo:
Select max(cam) from (
select ...
uinon...
union...
)
obviamente esto solo funcionarà si todos los campos son del mismo tipo...
para crear esta consulta dinà micamente puedes hacer:
SELECT 'select '||column_name||' as campo from '||table_name||' Union'||chr(13)
FROM user_tab_columns
WHERE table_name = NOMBRE_TABLA
a esto le borrras el ùltimo union y lo metes en una subquery como te dije anteriormente...
Espero que te sirva
Salu2
Select campo1 cam
from tabla
union
select campo2 cam
from tabla
union
....
select campoN
from tabla
a esto lo encerras ente parentesis y buscas el mà ximo:
Select max(cam) from (
select ...
uinon...
union...
)
obviamente esto solo funcionarà si todos los campos son del mismo tipo...
para crear esta consulta dinà micamente puedes hacer:
SELECT 'select '||column_name||' as campo from '||table_name||' Union'||chr(13)
FROM user_tab_columns
WHERE table_name = NOMBRE_TABLA
a esto le borrras el ùltimo union y lo metes en una subquery como te dije anteriormente...
Espero que te sirva
Salu2
