sqlstate - sqlcode 576
¿Hay una función "más importante" en db2? (5)
¿Por qué MAX no funciona para usted?
seleccione max (1,2,8,3,1,7) desde sysibm.sysdummy1
me da
1
---------------
8
1 record(s) selected.
Encontré en MYSQL y aparentemente en otros motores de base de datos que hay una función "máxima" que se puede usar como: máxima (1, 2, 3, 4) y devolvería 4. Necesito esto, pero estoy usando el DB2 de IBM . ¿Alguien sabe de una función equivalente, incluso si solo acepta 2 parámetros?
Encontré un lugar donde MAX debería hacerlo, pero no funciona ... solo funciona al seleccionar el MAX de una columna.
Si no existe tal función, ¿alguien tiene una idea de cómo sería un procedimiento almacenado para hacer esto? (No tengo experiencia en procedimientos almacenados, por lo que no tengo idea de qué podría ser capaz DB2).
Dos opciones:
¿Qué hay de ordenar la columna al descender y agarrar la fila superior 1?
De acuerdo con mi "Guía de bolsillo SQL", MAX (x) devuelve el mayor valor en un conjunto.
ACTUALIZACIÓN: Aparentemente, el # 1 no funcionará si estás mirando columnas.
Como señala Dave, MAX debería funcionar ya que está sobrecargado como función tanto escalar como de columna (el escalar toma 2 o más argumentos). Este es el caso en DB2 para LUW, DB2 para z / OS y DB2 para i5 / OS. ¿Qué versión exacta y plataforma de DB2 está utilizando y cuál es la declaración exacta que está utilizando? Uno de los requisitos de la versión escalar de MAX es que todos los argumentos son "compatibles". Sospecho que puede haber una diferencia de tipo sutil en uno o más de los argumentos que está pasando a la función.
En Linux V9.1, el "select max (1,2,3) ..." da -
SQL0440N No se ha encontrado ninguna rutina autorizada llamada "MAX" de tipo "FUNCIÓN" que tenga argumentos compatibles. SQLSTATE = 42884
Es una función escalar que requiere un solo valor o un solo nombre de columna. En z / os, se comporta de manera diferente.
Sin embargo, funciona como se esperaba en Linux 9.5.
Suena loco, pero tal función no existe en DB2, al menos no en la versión 9.1. Si desea seleccionar la mayor de dos columnas, sería mejor usar una expresión de caso.
También puede definir su propia función máxima. Por ejemplo:
create function importgenius.max2(x double, y double)
returns double
language sql
contains sql
deterministic
no external action
begin atomic
if y is null or x >= y then return x;
else return y;
end if;
end
Definir las entradas y salidas como dobles le permite aprovechar la promoción de tipo, por lo que esta función también funcionará para enteros. Las instrucciones "determinista" y "sin acción externa" ayudan al motor de la base de datos a optimizar el uso de la función.
Si desea que funcione otra función máxima para las entradas de caracteres, deberá darle otro nombre.