Eu gostaria de escrever uma função com dois IN
parâmetros em que o primeiro é um varchar
e o segundo uma lista de varchars
. Com base nisso, quero retornar uma tabela com valores variáveis de coluna e nomes do tipo varchar
.
Tanto quanto eu vi, eu tenho que sempre criar um objeto / registro e um tipo de tabela. Isso significa que minha ideia não vai funcionar? O objetivo subjacente é passar uma saída de comando do sistema de volta para um receptor como uma tabela.
Edit: mais sobre a tarefa. Quero emitir um comando do SO, consumir a saída e retorná-la como uma tabela. A saída do comando do sistema operacional será dados no formato CSV. No momento da execução, não sei a quantidade de linhas a serem retornadas, mas apenas a quantidade de colunas que são passadas como o segundo argumento. Eu estava pensando em usar Java com uma dinâmica STRUCT
e em ARRAY
contê-los. Embora eu prefira a abordagem anterior.
Deve ficar assim:
create function(clob query, list of varchars cols) returns table
begin
execute system command(query, cols);
examine sysout from command;
return tabular data from syscmd as table;
end
fonte
Respostas:
É possível, embora bastante complicado, escrever uma função de tabela em pipeline que retorne uma estrutura variável . Sua função de tabela de pipeline pode usar os dois argumentos e usar a interface do Oracle Data Cartridge e a magia do tipo AnyDataSet para retornar uma estrutura dinâmica em tempo de execução. Você pode usá-lo nas instruções SQL subsequentes como se fosse uma tabela, ou seja,
Mais algumas referências que discutem a mesma implementação de amostra
fonte
Acho que sua melhor abordagem é abandonar a tentativa de enviar de volta uma tabela dinâmica (embora suponha que você possa criar uma tabela temporária e devolver um refcursor a ela, mas não tenho certeza aqui).
Minha abordagem preferida aqui seria gerar resultados em um formato mais flexível, algo como um documento XML ou algo semelhante e devolvê-lo. Isso oferece a flexibilidade de que você precisa sem ter que determinar as colunas após a verificação da função.
fonte
você pode criar uma visualização tmp e substituir a visualização dinamicamente.
resultados de execução:
fonte
Uma solução seria criar uma tabela externa com base na saída do Lucene. Você pode alterar facilmente a definição de tabela externa (e apontá-la para vários arquivos).
Então você terá:
fonte