- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 12 anos, 11 meses atrás por rwarstat.
-
AutorPosts
-
16 de dezembro de 2011 às 11:18 pm #102242rwarstatParticipante
Pessoal,
Preciso listar os arquivos que estão em um diretório no servidor. Para fazer isso estou usando o seguinte código:
– como sys executo o script abaixo
grant execute on dbms_backup_restore to usuario
/CREATE OR REPLACE FORCE VIEW "SYS"."X_$KRBMSFT"
(
"ADDR",
"INDX",
"INST_ID",
"FTYPE_KRBMSFT",
"FLAGS_KRBMSFT",
"DBID_KRBMSFT",
"DBNAME_KRBMSFT",
"FNAME_KRBMSFT",
"FNO_KRBMSFT",
"ROWNO_KRBMSFT",
"RECID_KRBMSFT",
"STAMP_KRBMSFT",
"SIZE_KRBMSFT"
)
AS
SELECT "ADDR",
"INDX",
"INST_ID",
"FTYPE_KRBMSFT",
"FLAGS_KRBMSFT",
"DBID_KRBMSFT",
"DBNAME_KRBMSFT",
"FNAME_KRBMSFT",
"FNO_KRBMSFT",
"ROWNO_KRBMSFT",
"RECID_KRBMSFT",
"STAMP_KRBMSFT",
"SIZE_KRBMSFT"
FROM SYS.X$KRBMSFT
/GRANT SELECT ON SYS.X_$KRBMSFT TO usuario
/
– com o usuário eu executo o bloco PL/SQL abaixo
DECLARE
caminho_xml VARCHAR2 (1024);
ns VARCHAR2 (1024);
vIndex NUMBER (3) := 0;TYPE vArquivo IS RECORD (id_arq NUMBER (3), nm_arquivo VARCHAR2 (100));
TYPE tArquivo
IS
TABLE OF vArquivo
INDEX BY BINARY_INTEGER;vArqXML tArquivo;
BEGIN
SELECT d.directory_path
INTO caminho_xml
FROM sys.ALL_DIRECTORIES d, sys.ALL_OBJECTS o
WHERE o.OWNER = d.OWNER
AND o.OBJECT_NAME = d.DIRECTORY_NAME
AND o.object_type = 'DIRECTORY'
AND o.owner = 'SYS'
AND d.directory_name = 'DIR_XML';SYS.DBMS_BACKUP_RESTORE.searchFiles (caminho_xml, ns);
FOR each_file IN (SELECT FNAME_KRBMSFT AS name
FROM X_$KRBMSFT
WHERE FNAME_KRBMSFT LIKE '%.xml')
LOOP
DBMS_OUTPUT.PUT_LINE (each_file.name);
END LOOP;
END;
Quando executo o bloco acima em um banco 10.2.0.1 em um servidor linux, ele fala que a tabela ou view não existe para X_$KRBMSFT. Mas se eu executar isso em um banco 11.2.0.1 em uma máquina com Windows XP, funciona.
Alguém teria alguma sugestão do que posso fazer para funcionar nos 2 bancos?
Basicamente o quê quero é listar todos os arquivos que estão em diretório. O diretório em questão eu pego do directory DIR_XML, que foi informado no primeiro select.Abraço,
Roberto19 de dezembro de 2011 às 7:46 pm #102254diegolenhardtParticipantejá usei isso num 10G, deve ser algum synonym ou grant,
um detalhe interessante é que esse esquema não permite ser executado com DEBUG,
da erro 6502 se nao me engano, eu debugava com inserts no meio do codigo…
=/
19 de dezembro de 2011 às 7:59 pm #102255rwarstatParticipanteDiego,
Obrigado pela respsota.
Eu postei a mesma dúvida na lista oracle_br e a rspsota que obtive do Chiappa é que é altamente não recomendado usar esse tipo de programação, pois são tabelas não documentadas do banco e a própria package é de uso interno do banco.
Posto isso, resolvi partir para a opção de usar java para trazer a lista de arquivos.Se quiser, posso postar aqui a respsota do Chiappa.
Abraço,
Roberto19 de dezembro de 2011 às 8:10 pm #102257diegolenhardtParticipanteé na época eu vi que tinha um lance assim, mas usei assim mesmo e nunca deu problema,
talvez pelo meu ambiente, no seu talvez nao de certo,pode fazer uma classe java pra listar o diretorio,
ou o SO criar um arquivo texto com o nome dos arquivos..
ai com o dbms_schedule, tu roda primeira um .sh e depois sabe que terá um arquivo lá “conteudo.txt” por exemplo..
=]
19 de dezembro de 2011 às 8:15 pm #102258rwarstatParticipanteSim, e tem a versão do banco. Na 10.2.0.1 essa tabela não existe.
Acabei optando pela classe java mesmo. Assim fica tudo dentro do banco.Abraço,
Roberto -
AutorPosts
- Você deve fazer login para responder a este tópico.