Existe no ORACLE alguma função ou store procedure equivalente a sp_executesql do MS-SQL server?
Pois estou tentando executar uma query dinâmica no ORACLE utilizando execute immediate e não está dando certo.
Descobri que o execute immediate só roda comandos como CREATE, INSERT e etc. mas não executa SELECT de forma direta.
Estou deixando o código abaixo para ser mais claro e conto com a ajuda dos colegas.
declare
vCampos varchar2(20000);
vSQL_1 varchar2(20000);
begin
vCampos := '''Processo - N.T.''' || ', ' || '''Produto Acabado - N.T.''' || ', ' || '''Inspeção''' || ', ' || '''Produto Acabado - Rodovia''';
vSQL_1 := 'create or replace view mgcli.vw_teste as
select * from
(
select t.fil_in_codigo Filial
, t.pro_in_codigo Codigo_Mega
, p.pro_st_alternativo Codigo_Antigo
, cc.pro_in_codigo_inteligente Codigo_Inteligente
, p.pro_st_descricao Descrição
, p.unip_st_unidade UN
, a.alm_st_almoxar Almoxarifado
, t.mvs_re_quantidade Qtde
from mgadm.est_movsumarizado t
, mgadm.est_produtos p
, mgadm.est_almoxarifado a
, mgadm.est_produtoscmpesp cc
where t.org_in_codigo = 1031
and p.gru_ide_st_codigo in (00,01,04)
and p.cla_gru_in_codigo in (1,130)
and t.pro_tab_in_codigo = p.pro_tab_in_codigo
and t.pro_pad_in_codigo = p.pro_pad_in_codigo
and t.pro_in_codigo = p.pro_in_codigo
and t.alm_pad_in_codigo = a.alm_pad_in_codigo
and t.alm_tab_in_codigo = a.alm_tab_in_codigo
and t.alm_in_codigo = a.alm_in_codigo
and p.pro_tab_in_codigo = cc.pro_tab_in_codigo (+)
and p.pro_pad_in_codigo = cc.pro_pad_in_codigo (+)
and p.pro_in_codigo = cc.pro_in_codigo (+)
)
pivot
(
sum(Qtde)
for Almoxarifado IN (' || vCampos || ')
)
order by 1, 3;';
execute immediate(vSQL_1); --Erros apresentados: caractere inválido ou palavra-chave não encontrada.
-- no SQL Server isso rodaria assim exec sp_executesql vSQL_1;
end;