Erro ao executar SYS.DBMS_BACKUP_RESTORE.SEARCHFILES

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Avatar do usuário
fabissilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 09 Set 2019 4:29 pm
Localização: Sorocaba - SP
Fabi
INSERT INTO possivel VALUES ('Nada é impossível para aquele que persiste');

Boa tarde,

Tenho a função DBMS_BACKUP_RESTORE.SEARCHFILES que eu uso para fazer importação de arquivos XML em uma procedure


Porém ao fazer o select da função

Selecionar tudo

 select *  from table(fn_list_files_xml_nfe) a 
ocorre a seguinte mensagem:

Selecionar tudo

ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "SYS.FN_LIST_FILES_XML_NFE", line 19
ORA-06512: at line 1
Visualizar fonte do programa da pilha de erro?
erro.JPG
Pois ao processar o job foi lido um .bat e acredito que seja por isso que ta dando erro.

Minha duvida é, como eu faço para zerar esses dados abaixo ou pelo menos que não contenha a extensão .XML ?
select.JPG
Avatar do usuário
fabissilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 09 Set 2019 4:29 pm
Localização: Sorocaba - SP
Fabi
INSERT INTO possivel VALUES ('Nada é impossível para aquele que persiste');

Bom dia,

Alguém poderia me ajudar com a duvida acima :cry:
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Veja se o tamanho do LV_PATTERN e LV_NS são suficientes.
Talvez tenha que aumentar.
Eu vi um exemplo do Oracle Base onde ele usa um tamanho bem maior:

Selecionar tudo

CREATE OR REPLACE TYPE sys.ob_varchar2_arr AS TABLE OF VARCHAR2(500);
/

CREATE OR REPLACE FUNCTION sys.ob_get_files (p_pattern        IN VARCHAR2,
                                             p_file_separator IN VARCHAR2 := '/')
  RETURN sys.ob_varchar2_arr PIPELINED
AS
  l_pattern VARCHAR2(32767);
  l_ns      VARCHAR2(32767);
BEGIN
  -- Make sure the pattern ends with the file separator.
  l_pattern := RTRIM(p_pattern, p_file_separator) || p_file_separator;
   
  sys.DBMS_BACKUP_RESTORE.searchfiles(
    pattern => l_pattern,
    ns      => l_ns,
    onlyfnm => TRUE,
    normfnm => TRUE);

  -- Pull back all files directly under specified directory.
  -- WHERE filter removes recursion.
  FOR cur_rec IN (SELECT fname_krbmsft
                  FROM   sys.x$krbmsft
                  WHERE  INSTR(SUBSTR(fname_krbmsft, LENGTH(l_pattern)+1), p_file_separator) = 0)
  LOOP
    -- Display the file name without the preceding path.
    PIPE ROW(SUBSTR(cur_rec.fname_krbmsft, LENGTH(l_pattern)+1));
  END LOOP;
  RETURN;
END;
/

--We make sure our test user have access to the pipelined table function and the table type.
GRANT EXECUTE ON sys.ob_varchar2_arr TO testuser1;
GRANT EXECUTE ON sys.ob_get_files TO testuser1;

--Test It - We connect to the test user and run a query, passing the directory of interest. It doesn't matter if we use final "/" or not, as the code always adds one.
CONN testuser1/testuser1@//localhost:1521/pdb1

COLUMN file_name FORMAT A30

SELECT column_value AS file_name
FROM   TABLE(sys.ob_get_files('/u01/app/oracle/diag/rdbms/cdb1/cdb1/trace'));

FILE_NAME
------------------------------
cdb1_ora_15109.trc
cdb1_ora_15109.trm
alert_cdb1.log

... removed for brevity ...

cdb1_ora_20934.trm
cdb1_m004_20954.trc
cdb1_m004_20954.trm

481 rows selected.

SQL>
Outra coisa pra testar é o tamanho do FILE_ARRAY.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 33 visitantes