variable type sql oracle plsql oracle10g ora-00904

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 y FALSE en una columna de base de datos. No puede seleccionar o recuperar valores de columna en una variable BOOLEAN . Las funciones llamadas desde una consulta SQL no pueden tomar ningún parámetro BOOLEAN . Tampoco pueden SQL funciones incorporadas de SQL como TO_CHAR ; para representar valores BOOLEAN en salida, debe usar construcciones IF-THEN o CASE para traducir valores BOOLEAN a otro tipo, como 0 o 1 , ''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;