Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como usar um tipo de tabela em uma instrução SELECT FROM?


No SQL, você só pode usar o tipo de tabela que é definido no nível do esquema (não no nível do pacote ou do procedimento), e a tabela index-by (array associativo) não pode ser definida no nível do esquema. Então - você tem que definir a tabela aninhada como esta
create type exch_row as object (
    currency_cd VARCHAR2(9),
    exch_rt_eur NUMBER,
    exch_rt_usd NUMBER);

create type exch_tbl as table of exch_row;

E então você pode usá-lo no SQL com o operador TABLE, por exemplo:
declare
   l_row     exch_row;
   exch_rt   exch_tbl;
begin
   l_row := exch_row('PLN', 100, 100);
   exch_rt  := exch_tbl(l_row);

   for r in (select i.*
               from item i, TABLE(exch_rt) rt
              where i.currency = rt.currency_cd) loop
      -- your code here
   end loop;
end;
/