Como faço para executar uma função do Toad para Oracle e vincular o resultado a uma grade de dados
Pergunta
Eu tenho uma função que toma como um dos seus argumentos um varray de objetos PL/SQL. Como faço para executar esse procedimento armazenado e vincular o conjunto de resultados de que ele retorna a uma grade de dados no Toad for Oracle?
Solução
Depois de algumas pesquisas, encontrei a resposta para o meu próprio problema. Digamos que seu tipo de varray foi chamado varchar_pair_array e os objetos armazenados nessa matriz foram chamados de varchar_pair_object. varchar_pair_object é um objeto simples que possui dois varchars como seus membros.
Aqui está o código para executar um Proc que recebe um Varray de varchar_pair_object (s):
DECLARE
RetVal SYS_REFCURSOR;
a_simplevalue VARCHAR2(200);
another_simplevalue VARCHAR2(200);
my_array_of_varchar_pairs VARCHAR_PAIR_ARRAY; -- assume varchar_pair_array is defined somewhere else
my_obj VARCHAR_PAIR_OBJECT; -- assume varchar_pair_object is defined somewhere else
my_other_obj VARCHAR_PAIR_OBJECT;
BEGIN
a_simplevalue := 'hello';
another_simplevalue := 'there';
my_obj := VARCHAR_PAIR_OBJECT('nice to meet you', 'greetings');
my_other_obj := VARCHAR_PAIR_OBJECT('goodbye', 'ciao');
my_array_of_varchar_pairs := VARCHAR_PAIR_ARRAY();
my_array_of_varchar_pairs.EXTEND(2); -- this should be the number of objects you plan to put into the array
my_array_of_varchar_pairs(1) := my_obj;
my_array_of_varchar_pairs(2) := my_other_obj;
RetVal := my_function ( a_simplevalue, another_simplevalue, my_array_of_varchar_pairs); -- assuming your array takes two varchars and one array of VARCHAR_PAIR_OBJECT (s)
:to_grid := RetVal;
END;
Copie colar este código no editor SQL do Toad e altere -o para se adaptar à sua função e tipos e pressionar F9. Toad solicitará o tipo de variável: to_grid. Selecione cursor (assumindo que sua função retorne um cursor de ref) e pressione Enter. Toad vinculará o conjunto de resultados a uma grade de dados.
Links que me ajudaram:
http://www.smart-soft.co.uk/oracle/oracle-plsql-tutorial-part-11.htm (bom tutorial sobre coleções)http://download.oracle.com/docs/cd/b10501_01/appdev.920/a96624/10_objs.htm#1972 (Especialmente útil neste caso é a seção sobre declarar e inicializar objetos)
Com muito pouca mudança, o mesmo pode ser feito com um procedimento.