Comment utiliser le type BOOLEAN dans l’instruction SELECT

J’ai une fonction PL / SQL avec BOOLEAN en paramètre:

function get_something(name in varchar2, ignore_notfound in boolean); 

Cette fonction fait partie d’un outil tiers, je ne peux pas changer cela.

Je voudrais utiliser cette fonction dans une instruction SELECT comme ceci:

  select get_something('NAME', TRUE) from dual; 

Cela ne fonctionne pas, je reçois cette exception:

ORA-00904: “TRUE”: identifiant invalide

Si je comprends bien, le mot-clé TRUE n’est pas reconnu.

Comment puis-je faire ce travail?

Vous pouvez créer une fonction wrapper comme ceci:

 function get_something(name in varchar2, ignore_notfound in varchar2) return varchar2 is begin return get_something (name, (upper(ignore_notfound) = 'TRUE') ); end; 

puis appelez:

 select get_something('NAME', 'TRUE') from dual; 

C’est à vous de décider quelles sont les valeurs valides de ignore_notfound dans votre version, j’ai supposé que ‘TRUE’ signifie TRUE et que toute autre chose signifie FALSE.

Vous pouvez certainement obtenir une valeur booléenne à partir d’une requête SELECT, vous ne pouvez simplement pas utiliser un type de données booléen.

Vous pouvez représenter un booléen avec 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 

Retourne 1 (dans Hibernate / Mybatis / etc 1 est vrai). Sinon, vous pouvez obtenir des valeurs booléennes imprimables à partir d’un SELECT.

 SELECT CASE WHEN (10 > 0) THEN 'true' ELSE 'false' END AS MY_BOOLEAN_COLUMN FROM DUAL 

Cela renvoie la chaîne 'true' .

De la documentation :

Vous ne pouvez pas insérer les valeurs TRUE et FALSE dans une colonne de firebase database. Vous ne pouvez pas sélectionner ou extraire des valeurs de colonne dans une variable BOOLEAN . Les fonctions appelées à partir d’une requête SQL ne peuvent pas prendre de parameters BOOLEAN . Les fonctions SQL intégrées telles que TO_CHAR ne peuvent pas non plus être TO_CHAR . Pour représenter les valeurs BOOLEAN en sortie, vous devez utiliser les constructions IF-THEN ou CASE pour traduire les valeurs BOOLEAN en un autre type, tel que 0 ou 1 , 'Y' ou 'N' , 'true' ou 'false' , etc. .

Vous devrez créer une fonction wrapper prenant un type de données SQL et l’utilisant à la place.

Le type de données BOOLEAN est un type de données PL / SQL. Oracle ne fournit pas un type de données SQL équivalent (…), vous pouvez créer une fonction wrapper qui mappe un type SQL au type BOOLEAN.

Vérifiez ceci: http://forums.datadirect.com/ddforums/thread.jspa?threadID=1771&tstart=0&messageID=5284

 select get_something('NAME', sys.diutil.int_to_bool(1)) from dual; 

Comstackz ceci dans votre firebase database et commencez à utiliser des instructions booléennes dans vos requêtes.

note: la fonction get a un paramètre varchar2, assurez-vous donc d’envelopper les “chaînes” dans votre déclaration. Il retournera 1 pour vrai et 0 pour faux;

 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; / 

La réponse à cette question est la suivante: n’utilisez pas BOOLEAN avec Oracle – PL / SQL est stupide et ne fonctionne pas. Utilisez un autre type de données pour exécuter votre processus.

Note aux développeurs de rapports SSRS avec source de données Oracle: Vous pouvez utiliser les parameters BOOLEAN, mais faites attention à la manière dont vous les implémentez. Oracle PL / SQL ne fonctionne pas correctement avec BOOLEAN, mais vous pouvez utiliser la valeur BOOLEAN dans le filtre de tableau masortingciel si les données résident dans votre dataset. Cela m’a vraiment bouleversé, car j’ai utilisé le paramètre BOOLEAN avec la source de données Oracle. Mais dans ce cas, je filtrais par rapport aux données Tablix, pas aux requêtes SQL.

Si les données ne figurent PAS dans vos champs de jeu de données SSRS, vous pouvez réécrire le code SQL de la manière suivante en utilisant un paramètre INTEGER:

__

  Integer   0   Pickup orders?    0    1      ...  Gmenu   =Parameters!paramPickupOrders.Value   where (:paramPickupOrders = 0 AND ordh.PICKUP_FLAG = 'N' OR :paramPickupOrders = 1 AND ordh.PICKUP_FLAG = 'Y' ) 

Si les données se trouvent dans vos champs de jeu de données SSRS, vous pouvez utiliser un filtre de tableau masortingciel avec un paramètre BOOLEAN:

__

   Boolean   false   Only orders with no load?  ...     =(Parameters!paramFilterOrdersWithNoLoad.Value=false) or (Parameters!paramFilterOrdersWithNoLoad.Value=true and Fields!LOADNUMBER.Value=0)  Equal  =true    

PL / SQL se plaint que TRUE n’est pas un identificateur ou une variable valide. Configurez une variable locale, définissez-la sur TRUE et transmettez-la à la fonction get_something.

Que diriez-vous d’utiliser une expression qui évalue TRUE (ou FALSE)?

 select get_something('NAME', 1 = 1) from dual