PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Function que retorna um recordset #430922

12/12/2012

0

Olá Pessoal, tudo bem?!

Estou com dúvidas sobre como criar uma função. Dado um determinado parâmetro, a função deve realizar um select utilizando o parâmetro informado e em seguida, deve retornar o resultado do select como um recordset.
Como tive mais contato com o SQL Server do que com o Oracle, estou apanhando um pouco... Será que vocês poderiam me ajudar?! Procurei em alguns fóruns e até vi um exemplo exato do que eu preciso. Tentei replicá-lo mas ao tentar rodar o script de create da function, aparece uma mensagem "Warning: execução concluída com advertência FUNCTION FN_MX2_IDENTIFICA_MSG Compilado."

Pelo que eu entendi, eu preciso:
- Primeiramente, criar um OBJECT contendo a estrutura das colunas que o resultado contém;
- Declarar o TYPE do retorno da function;
- Declarar a function.

Segue abaixo o código que estou usando...

Desde já, obrigado pela ajuda!!!

Abs,

Fernando.


--===============================================================================================================--
--===============================================================================================================--

CREATE OR REPLACE TYPE MX2_OBJ_TYPE IS OBJECT
(
COD_PRODUTO NUMBER (10,0),
TIPO_PRODUTO VARCHAR2(30),
MODALIDADE VARCHAR2(30),
SUBPRODUTO VARCHAR2(30),
EVENTO VARCHAR2(30),
FAMILIA VARCHAR2(30),
GRUPO VARCHAR2(30),
TIPO_SUBPRODUTO VARCHAR2(30),
COD_SERVICO NUMBER (10,0),
SIS_ORIG CHAR (3),
SIS_DEST CHAR (3),
PRIORIDADE NUMBER (2,0),
ID_MSG VARCHAR2(50),
ATIVO NUMBER (1,0),
IND_QUEBRA NUMBER (1,0),
TIPO_MSG VARCHAR2(30),
DIR_FLUXO NUMBER (1,0),
DES_PRIO_SERV VARCHAR2(30)
)

--===============================================================================================================--
--===============================================================================================================--

CREATE OR REPLACE TYPE MX2_TABTYPE AS TABLE OF MX2_OBJ_TYPE

--===============================================================================================================--
--===============================================================================================================--

CREATE OR REPLACE FUNCTION FN_MX2_IDENTIFICA_MSG (IN_ID_MSG IN VARCHAR2)
RETURN MX2_TABTYPE
AS
V_MX2_TABTYPE MX2_TABTYPE;
BEGIN
SELECT MX2_OBJ_TYPE
(
A.COD_PRODUTO ,
A.TIPO_PRODUTO ,
A.MODALIDADE ,
A.SUBPRODUTO ,
A.EVENTO ,
A.FAMILIA ,
A.GRUPO ,
A.TIPO_SUBPRODUTO ,
B.COD_SERVICO ,
B.SIS_ORIG ,
B.SIS_DEST ,
B.PRIORIDADE ,
B.ID_MSG ,
B.ATIVO ,
B.IND_QUEBRA ,
B.TIPO_MSG ,
B.DIR_FLUXO ,
B.DES_PRIO_SERV
)
BULK COLLECT INTO V_MX2_TABTYPE
FROM TB_PRODUTO A
JOIN TB_SERVICO B
ON A.COD_PRODUTO = B.COD_PRODUTO
WHERE B.ID_MSG = IN_ID_MSG;
RETURN V_MX2_TABTYPE;
END;

--===============================================================================================================--
--===============================================================================================================--
Fernando Ito

Fernando Ito

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar