- Este tópico contém 9 respostas, 6 vozes e foi atualizado pela última vez 16 anos, 6 meses atrás por
Sergio Willians.
-
AutorPosts
-
28 de maio de 2009 às 5:51 pm #87034
Anônimo
Bom dia,
Estou precisando fazer um Decode para tratar o retorno de uma função, porém ela retorna um boolean, e pelo que sei o comando Decode não trabalha com esse tipo de dado, tentei tb com o comando Case, mas também não consegui pelo mesmo motivo.
Alguém sabe como resolver esse problema?28 de maio de 2009 às 6:06 pm #87037David Siqueira
ParticipanteCara eu não entendi a sua dúvida?..Você quer dar um tratamento para um campo BOLEAN onde as opções só podem ser TRUE ou FALSE?..Porque razão seria isso?…Creio que isso não seja possível, eu pelo menos desconheço.
Abcs.
David
28 de maio de 2009 às 6:14 pm #87038Anônimo
não é isso, vou explicar melhor:
Eu tenho uma função que retorna um booleano;
Eu preciso fazer um select, que retornará valor “x”, se o resultado da função for true e valor “y” se o resultado da função for false, para isso eu tentei usar o decode, porém decode não trata valores booleanos, por isso não estou conseguindo fazê-lo.;28 de maio de 2009 às 6:25 pm #87039Regis Araujo
ParticipanteOpa.. Desculpa me intrometer…
Ajax, será que ao inves da sua funcão retornar um valor true ou false vc retorne uma string T ou F ?
Assim..
...if (valor) then
Result := 'T';
elsif
Result := 'F';
end if;...
Return(result);
...
Ai no seu decode ficaria assim..
decode(functionboolean(valor),'T','VERDADEIRO','F','FALSO')
Bom.. espero que a idéia ajude…
28 de maio de 2009 às 6:27 pm #87040Rodrigo Mesquita
Participantevc pode fazer assim
sys.diutil.bool_to_int(funcao);
ele retorna assim
0 false
1 true
null nuloai vc pode fazer um decode a partir desses valores.
28 de maio de 2009 às 7:19 pm #87043David Siqueira
ParticipanteBoa Rodrigo e Regis
No Sql Server pelo fato dele não ter variaveis do tipo BOOLEAN a galera usa char(1), e ai faz os tratamentos devidos em alguns casos.Abraço atodos.
David
28 de maio de 2009 às 8:21 pm #87044Leonardo Litz
ParticipanteVocê tb pode user um case
select case when a then
‘verdadeiro’
else
‘falso’
end
from dualvlw Leonardo Litz
28 de maio de 2009 às 9:53 pm #87047Sergio Willians
MestreMe corrijam se eu estiver errado…mas a package sys.diutil.bool_to_int() só funciona dentro de bloco PL/SQL.
Pelo que eu entendi, o caro colega quer fazer isso diretamente na query.
28 de maio de 2009 às 10:09 pm #87049Rodrigo Mesquita
Participanteé verdade, esta função não funciona dentro de um sql.
mais para resolve isso é só criar uma funcão que receba os parametros para executar a sua função e retornar o resultado em inteiro.
Function teste(p1 in number, p2 in number) return number
declare
result_bol boolean;
result_int number;
begin
— Call the function
result_bol := funcao_booleana(p1,p2);
result_int := sys.diutil.bool_to_int(result);
return result_int;
end;depois chamar essa funcao no select
select testes(parametro1,parametro2) from
28 de maio de 2009 às 11:55 pm #87052Sergio Willians
MestreExatamente !
Eu tive um problema uma vez com uma function que retornava booleano e eu precisava utilizá-la em uma query.
Como não poderia alterar o objeto, utilizei uma técnica super-ninja de workaround. Fiz uma function que chamava aquela function e retornava varchar ! rs
Não é o mais adequado, mas funcionou ! -
AutorPosts
- Você deve fazer login para responder a este tópico.