sql - type - Cómo usar el tipo BOOLEAN en la instrucción SELECT
oracle boolean variable (8)
El tipo de datos BOOLEAN es un tipo de datos PL / SQL. Oracle no proporciona un tipo de datos SQL equivalente (...) puede crear una función contenedora que asigna un tipo SQL al tipo BOOLEAN.
Mira esto: http://forums.datadirect.com/ddforums/thread.jspa?threadID=1771&tstart=0&messageID=5284
Tengo una función PL / SQL con BOOLEAN en el parámetro:
function get_something(name in varchar2, ignore_notfound in boolean);
Esta función es parte de una herramienta de terceros, no puedo cambiar esto.
Me gustaría usar esta función dentro de una declaración SELECT como esta:
select get_something(''NAME'', TRUE) from dual;
Esto no funciona, obtengo esta excepción:
ORA-00904: "VERDADERO": identificador no válido
Según entiendo, la palabra clave TRUE
no es reconocida.
¿Cómo puedo hacer que esto funcione?
¿Qué hay de usar una expresión que evalúa a VERDADERO (o FALSO)?
select get_something(''NAME'', 1 = 1) from dual
Compile esto en su base de datos y comience a usar declaraciones booleanas en sus consultas.
nota: la función get es un param varchar2, así que asegúrese de ajustar cualquier "cadena" en su declaración. Devolverá 1 para verdadero y 0 para falso;
select bool(''''''abc''''<''''bfg'''''') from dual;
CREATE OR REPLACE function bool(p_str in varchar2) return varchar2
is
begin
execute immediate '' begin if ''||P_str||'' then
:v_res := 1;
else
:v_res := 0;
end if; end;'' using out v_res;
return v_res;
exception
when others then
return ''"''||p_str||''" is not a boolean expr.'';
end;
/
De la documentation :
No puede insertar los valores
TRUE
yFALSE
en una columna de base de datos. No puede seleccionar o recuperar valores de columna en una variableBOOLEAN
. Las funciones llamadas desde una consultaSQL
no pueden tomar ningún parámetroBOOLEAN
. Tampoco puedenSQL
funciones incorporadas deSQL
comoTO_CHAR
; para representar valoresBOOLEAN
en salida, debe usar construccionesIF-THEN
oCASE
para traducir valoresBOOLEAN
a otro tipo, como0
o1
,''Y''
o''N''
,''true''
o''false''
, etc. .
Tendrá que hacer una función de contenedor que tome un tipo de datos SQL
y lo use en su lugar.
Definitivamente puede obtener un valor booleano de una consulta SELECT, simplemente no puede usar un tipo de datos booleano.
Puede representar un booleano con 1/0.
CASE WHEN (10 > 0) THEN 1 ELSE 0 END (It can be used in SELECT QUERY)
SELECT CASE WHEN (10 > 0) THEN 1 ELSE 0 END AS MY_BOOLEAN_COLUMN
FROM DUAL
Devoluciones, 1 (en Hibernate / Mybatis / etc 1 es verdadero). De lo contrario, puede obtener valores booleanos imprimibles de un SELECCIONAR.
SELECT CASE WHEN (10 > 0) THEN ''true'' ELSE ''false'' END AS MY_BOOLEAN_COLUMN
FROM DUAL
Esto devuelve la cadena ''true''
.
PL / SQL se queja de que VERDADERO no es un identificador válido o variable. Configure una variable local, establézcala en VERDADERO y páselo a la función get_something.
Puedes construir una función de envoltura como esta:
function get_something(name in varchar2,
ignore_notfound in varchar2) return varchar2
is
begin
return get_something (name, (upper(ignore_notfound) = ''TRUE'') );
end;
luego llame:
select get_something(''NAME'', ''TRUE'') from dual;
Depende de usted cuáles son los valores válidos de ignore_notfound en su versión, he supuesto que ''VERDADERO'' significa VERDADERO y cualquier otra cosa significa FALSO.
select get_something(''NAME'', sys.diutil.int_to_bool(1)) from dual;