Função no FireBird/sql

SQL

Firebird

12/12/2017

Galera, eu trabalhava com PL/SQL e desenvolvia funções para retornar valores dependendo dos parâmetros. Agora preciso fazer uma função no fireBird e acho que não tem como. Alguém poderia me ajudar?
Preciso passar nos parâmetros um valor de um campo ID empresas e retornar o nome da empresa.
Exemplo:
IDEMPRESA
1
2
3
4

NOME EMPRESA
'GGGGGG'
'HHHHHH'
'LLLLLL'

Para isso eu fiz um decode, mas quero colocao como função e chamá-la para que o código nao fique feio, além de poder usá-la outras vezes.

Obrigada!
Samila

Samila

Curtidas 0

Melhor post

Johnny

Johnny

12/12/2017

Samila,
você poderia utilizara uma Stored Procedure, eu fiz um exemplo e você pode adaptar ao seu código:

SET TERM ^ ;

create or alter procedure STP_EMPRESA (
    PI_IDEMPRESA integer)
returns (
    PO_IDEMPRESA integer,
    PO_NOME_EMPRESA varchar(50))
as
declare variable PV_IDEMPRESA integer;
declare variable PV_NOME_EMPRESA varchar(50);
begin
  for select
          IDEMPRESA,
          NOME_EMPRESA
      from
          TAB_EMPRESA -- TABELA ONDE VAI BUSCAR A EMPRESA
      where
          IDEMPRESA = :PI_IDEMPRESA
      into
          :PV_IDEMPRESA,
          :PV_NOME_EMPRESA
  do
  begin

    PO_IDEMPRESA = :PV_IDEMPRESA;
    PO_NOME_EMPRESA = :PV_NOME_EMPRESA;
    suspend;
  end
end^

SET TERM ; ^
GOSTEI 4

Mais Respostas

Johnny

Johnny

12/12/2017

Samila,
você poderia utilizara uma Stored Procedure, eu fiz um exemplo e você pode adaptar ao seu código:

SET TERM ^ ;

create or alter procedure STP_EMPRESA (
    PI_IDEMPRESA integer)
returns (
    PO_IDEMPRESA integer,
    PO_NOME_EMPRESA varchar(50))
as
declare variable PV_IDEMPRESA integer;
declare variable PV_NOME_EMPRESA varchar(50);
begin
  for select
          IDEMPRESA,
          NOME_EMPRESA
      from
          TAB_EMPRESA -- TABELA ONDE VAI BUSCAR A EMPRESA
      where
          IDEMPRESA = :PI_IDEMPRESA
      into
          :PV_IDEMPRESA,
          :PV_NOME_EMPRESA
  do
  begin

    PO_IDEMPRESA = :PV_IDEMPRESA;
    PO_NOME_EMPRESA = :PV_NOME_EMPRESA;
    suspend;
  end
end^

SET TERM ; ^




PI = Parâmetros de entrada;
PV = Variáveis;
PO = Parâmetros de saída.
GOSTEI 0
Samila

Samila

12/12/2017

Obrigada Johnny,

mas preciso que esses dados sejam apresentados no select, posso chamar a procedure no select?ou somente no from?
GOSTEI 0
Johnny

Johnny

12/12/2017

Pode sim, exemplo:

você pode fazer um join com a procedure assim como nesse exemplo abaixo

select
PO_COD_CATEGORIA,
PO_DES_CATEGORIA,
sum(PO_TOTAL_MES_ANT),
sum(PO_VAL_ANO_ANT),
sum(PO_TOTAL_ATINGIDO),
sum(PO_VAL_META),
TIPO_CATEGORIA

from
STP_META_SUBCATEGORIA('01.10.2017', '31.10.2017', '01.11.2017', '30.11.2017', '01.11.2016', '30.11.2016')
inner join
TAB_CATEGORIA CAT on STP_META_SUBCATEGORIA.PO_COD_CATEGORIA = CAT.COD_CATEGORIA
group by
PO_COD_CATEGORIA, PO_DES_CATEGORIA, TIPO_CATEGORIA
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

12/12/2017

algo assim:

SET TERM ^ ;
create or alter function NmEmpresa(nID integer) returns varchar(50)
as -- retorna a data do primeiro dia do mes
declare variable NOME_EMPRESA varchar(50);
begin
select nome from empresas where id = :nID into :NOME_EMPRESA;
return :NOME_EMPRESA;
end^
SET TERM ; ^

e você poderá utilizar no select da query.

select NmEmpresa( nf.ID ), *
from notafiscal nf
GOSTEI 1
POSTAR