Marcado: CLOB. PL/SQL
- Este tópico contém 32 respostas, 3 vozes e foi atualizado pela última vez 1 mês, 3 semanas atrás por lucianalopes.
-
AutorPosts
-
4 de outubro de 2024 às 10:52 am #177846José Laurindo ChiappaModerador
OK, vamos por partes : Primeiro, não precisa enviar o arquivo, não – não importa o conteúdo, o seu arquivo .XML sendo arquivo TEXTO, e Estando Formatado no padrão de quebra de linhas do Windows (isso é importante – não é difícil vc encontrar pelaí na internet aqruivos com quebras de linha padrão Linux/UNIX), o LOAD vai ser capaz de o ler, desde que os próximos pontos SEJAM respeitados :
a) o arquivo *** TEM *** que ser um arquivo DE TEXTO : se esse arquivo contiver IMAGENS ou caracteres de controle ocultos ou trechos de dados binários, COM CERTEZA o LOADCLOBFROM FILE ** NÃO FUNFA ** : esse C do CLOB significa Character, TEM QUE SER UM TEXTO….
b) esse erro “ORA-22285” é genérico , ele TANTO aparece se o arquivo não existir QUANTO se o Arquivo OU a pasta em si não estiver permissionada para o usuário Windows que roda o SGBD Oracle (*** NÃO É *** o usuário que vc está logada MAS sim o usuário que efetivamente EXECUTA o SGBD ORACLE), ou no mínimo para um dos Grupos que esse usuário é membro… Assim sendo, PLZ CHEQUE as permissões tanto da pasta quanto do arquivo…
Os procedimentos para vc checar QUEM é o usuário Windows que roda o SGBD Oracle E as permissões de pastas e arquivos,que eu vou mostrar abaixo, TEM que ser feitas por um Administrador, seja Administrador local, seja administrador de Rede : se nessa máquina Windows seu usuário Não É Admin local, plz peça para teu pessoal de infra fazer ou te dar esse acesso…
Para verificar QUEM é o usuário que roda o SGBD Oracle, executar o applet services.smc e nas propriedades do serviço OracleServiceXXX.exe (onde XXX é teu SID), veja a aba Logon… Já as permissões da pasta E do arquivo, no Windows Explorer, clickando com botão Direito (tanto na pasta quanto no arquivo) e usando a opção Propriedades e depois aba Segurança, veja lá… Pode aproveitar e fazer um teste adicional, que é : logada nesse Windows com o usuário que roda o SGBD Oracle (ou com usuário Windows membro do grupo ORA_DBA, funciona também) , navegue até a pasta C:\IMAGENS e rode :notepad C:\IMAGENS\teste.xml
e veja se abre ok…
c) o MAIS IMPORTANTE PONTO depois dessas questões de permissão : do MESMO MODO que os nomes de usuários, os nomes de tabelas, os nomes de colunas, etc, etc, etc, os NOMES DE DIRECTORY *** são *** gravados no Dicionário de dados em MAIÚSCULAS :
=> tentativa de execução com nome de directory em Minúsculas :
SCOTT@XEPDB1::CONT=XEPDB1> DECLARE
2 v_lob clob;
3 l_bfile bfile;
4 v_qtd_bytes number;
5 --
6 l_dest_offset integer := 1;
7 l_src_offset integer := 1;
8 l_bfile_csid number := 0;
9 l_lang_context integer := 0;
10 l_warning integer := 0;
11 BEGIN
12 l_bfile := bfilename( 'data_pump_dir', 'texto_longo.txt');
13 v_qtd_bytes := dbms_lob.getlength( l_bfile );
14 dbms_lob.fileopen( l_bfile ,dbms_lob.file_readonly);
15 -- crio uma linha na tabela com CLOB vazio, E guardo o ponteiro para esse CLOB, usarei no LOAD …
16 insert into TB_TESTE_CLOB (C1, C2) values (1, empty_clob() ) returning C2 into v_lob;
17
18 dbms_lob.loadclobfromfile (
19 dest_lob => v_lob,
20 src_bfile => l_bfile,
21 amount => v_qtd_bytes,
22 dest_offset => l_dest_offset,
23 src_offset => l_src_offset,
24 bfile_csid => l_bfile_csid ,
25 lang_context => l_lang_context,
26 warning => l_warning
27 );
28 --
29 dbms_output.put_line('Tamanho do arquivo é:'||dbms_lob.getlength( l_bfile ));
30 dbms_output.put_line('Bytes lidos e gravados=' ||dbms_lob.getlength(v_lob));
31 dbms_lob.fileclose( l_bfile );
32 commit;
33 END;
34 /
DECLARE
*
ERRO na linha 1:
ORA-22285: diretório ou arquivo inexistente para operação GETLENGTH
ORA-06512: em "SYS.DBMS_LOB", line 867
ORA-06512: em line 13
==> tentativa de execução com nome do directory em MAIÚSCULAS, Sucesso :
SCOTT@XEPDB1::CONT=XEPDB1> ed
Gravou file afiedt.buf
1 DECLARE
2 v_lob clob;
3 l_bfile bfile;
4 v_qtd_bytes number;
5 --
6 l_dest_offset integer := 1;
7 l_src_offset integer := 1;
8 l_bfile_csid number := 0;
9 l_lang_context integer := 0;
10 l_warning integer := 0;
11 BEGIN
12 l_bfile := bfilename( 'DATA_PUMP_DIR', 'texto_longo.txt');
13 v_qtd_bytes := dbms_lob.getlength( l_bfile );
14 dbms_lob.fileopen( l_bfile ,dbms_lob.file_readonly);
15 -- crio uma linha na tabela com CLOB vazio, E guardo o ponteiro para esse CLOB, usarei no LOAD …
16 insert into TB_TESTE_CLOB (C1, C2) values (1, empty_clob() ) returning C2 into v_lob;
17 dbms_lob.loadclobfromfile (
18 dest_lob => v_lob,
19 src_bfile => l_bfile,
20 amount => v_qtd_bytes,
21 dest_offset => l_dest_offset,
22 src_offset => l_src_offset,
23 bfile_csid => l_bfile_csid ,
24 lang_context => l_lang_context,
25 warning => l_warning
26 );
27 --
28 dbms_output.put_line('Tamanho do arquivo é:'||dbms_lob.getlength( l_bfile ));
29 dbms_output.put_line('Bytes lidos e gravados=' ||dbms_lob.getlength(v_lob));
30 dbms_lob.fileclose( l_bfile );
31 commit;
32* END;
33 /
Tamanho do arquivo é:34220
Bytes lidos e gravados=34218
Procedimento PL/SQL concluído com sucesso.
Tá bem ? E eu vi no seu código :
pasta:=bfilename(‘testetd’,’teste.xml’);
Tá vendo aí o nome do DIRECTORY em minúsculas ? Isso deve ser erro seu : até é POSSÍVEL criar nome de algum objeto/componente estrutural no Oracle respeitando minúsculas e maiúsculas , colocando ele entre aspas duplas, mas DUVIDO que vc tenha feito isso, e então ESSE É o MOTIVO do ser Erro…
Obs : o nome do arquivo , como é algo EXTERNO, aí é o Sistema Operacional que controla , e no Windows ele é INDIFERENTE à case :
SCOTT@XEPDB1::CONT=XEPDB1> ed
Gravou file afiedt.buf
1 DECLARE
2 v_lob clob;
3 l_bfile bfile;
4 v_qtd_bytes number;
5 --
6 l_dest_offset integer := 1;
7 l_src_offset integer := 1;
8 l_bfile_csid number := 0;
9 l_lang_context integer := 0;
10 l_warning integer := 0;
11 BEGIN
12 l_bfile := bfilename( 'DATA_PUMP_DIR', 'Texto_Longo.txt');
13 v_qtd_bytes := dbms_lob.getlength( l_bfile );
14 dbms_lob.fileopen( l_bfile ,dbms_lob.file_readonly);
15 -- crio uma linha na tabela com CLOB vazio, E guardo o ponteiro para esse CLOB, usarei no LOAD …
16 insert into TB_TESTE_CLOB (C1, C2) values (1, empty_clob() ) returning C2 into v_lob;
17 dbms_lob.loadclobfromfile (
18 dest_lob => v_lob,
19 src_bfile => l_bfile,
20 amount => v_qtd_bytes,
21 dest_offset => l_dest_offset,
22 src_offset => l_src_offset,
23 bfile_csid => l_bfile_csid ,
24 lang_context => l_lang_context,
25 warning => l_warning
26 );
27 --
28 dbms_output.put_line('Tamanho do arquivo é:'||dbms_lob.getlength( l_bfile ));
29 dbms_output.put_line('Bytes lidos e gravados=' ||dbms_lob.getlength(v_lob));
30 dbms_lob.fileclose( l_bfile );
31 commit;
32* END;
SCOTT@XEPDB1::CONT=XEPDB1> /
Tamanho do arquivo é:34220
Bytes lidos e gravados=34218
Procedimento PL/SQL concluído com sucesso.
SCOTT@XEPDB1::CONT=XEPDB1> exit
Desconectado de Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
C:\Users\jlchi>dir C:\app\oracle\product\21c\admin\XE\dpdump\32E2E310D29D4EC99CB01153313047B4\*TEXTO*.TXT
O volume na unidade C é Acer
O Número de Série do Volume é 2C56-9CDD
Pasta de C:\app\oracle\product\21c\admin\XE\dpdump\32E2E310D29D4EC99CB01153313047B4
03/10/2024 16:39 34.220 texto_longo.txt
1 arquivo(s) 32.220 bytes
0 pasta(s) 12.993.138.688 bytes disponíveis
C:\Users\jlchi>
Começa vendo esses pontos, okdoc ??
4 de outubro de 2024 às 11:03 am #177847José Laurindo ChiappaModeradorSim, até onde sei é sim necessária essa informação de tamanho de arquivo – então, esse trecho de :
v_qtd_bytes := dbms_lob.getlength( l_bfile );
** VAI SIM ** ser usado aqui :
17 dbms_lob.loadclobfromfile (
18 dest_lob => v_lob,
19 src_bfile => l_bfile,
20 amount => v_qtd_bytes,
...
Não sei SE vc não indicar o quanto ler ele VAI ou NÂO ler até o final do arquivo, mas por via das dúvidas, faça certinho, tá bem ??
4 de outubro de 2024 às 11:32 am #177848lucianalopesParticipanteJose bom dia,
Vou ver hoje em casa a noite e faco essa alteração.
Na verdade so eu mexo na maquina, nao atuo como TI.
Estou tentando mudar de area(voltar para TI), por isso comecei por oracle.
Entao o usuario do windows sou eu mesma, kkk
Nenhuma outra pessoa tem acesso.
O usuario do oracle meu e o sys, instalei ele assim.
Vou alterar hoje a noite, mais uma vez muito obrigado
4 de outubro de 2024 às 11:55 am #177849José Laurindo ChiappaModeradorTá : entendo então que o usuário com o qual vc loga nesse seu Windows É administrador local dessa máquina, E vc usou ele para instalar o SGBD Oracle, né ? Tá bom, aí CERTAMENTE esse seu usuário FAZ parte do grupo ORA_DBA, vc pode fazer o teste de acesso E listar os privilégios / permissões da PASTA e do ARQUIVO logada no Windows com esse usuário mesmo – É o caso neste meu notebook pessoal, vai de boas, ok…. EU ACREDITO que o problema principal nem deve ser esse MAS sim o fato de vc ter desrespeitado um dos principais conceitos do Oracle (ie, que TODAS as strings delimitadas por aspas simples SÃO CASE SENSITIVE) se se referem à dados Internos do Oracle), penso que corrigindo isso vc deve ter sucesso…
E REPITO DE NOVO, Atenção no que eu disse sobre o arquivo em si, além das permissões : para LOADCLOBFROMFILE funfar, o arquivo TEM que ser um arquivo TEXTO, absolutamente SEM BINÁRIOS NO MEIO, e Preferencialmente com quebra de linhas NO FORMATO WINDOWS, já que vc está rodando sob Windows teu database Oracle…
4 de outubro de 2024 às 12:12 pm #177850lucianalopesParticipanteBoa tarde Jose,
Sim nao sabia que existia diferenca case sensitive no oracle sobre aspas simples e duplas, aprendendo e vivendo,kk.
E outra estou comecando a fazer curso de DBA, para entender essas permissoes do oracle, mas tive que dar uma parada por causa que estou estudando para concurso publico.
Atenciosamente,
Luciana
4 de outubro de 2024 às 8:11 pm #177855José Laurindo ChiappaModeradorYep… Esse ponto de sensibilidade à case é UM dos conceitos fundamentais e que às vezes divergem de outros SGBDs , cruciais para qualquer um que for programar, administrar ou exportar/importar dados de/para um database Oracle.. Alguns outros :
a) num database Oracle, quando vc Cria o database é que vc indica o CHARACTERSET (conjunto de caracteres) para strings, e daí para diante é para ESSE conjunto de caracteres que as suas strings vão ser convertidas
b) quando o database Oracle que vc quer acessar está numa máquina remota (a situação COMUM em qquer Empresa), desde que a sua máquina pessoal TENHA acesso por rede à máquina do database, vc até pode fazer acesso direto ao database Oracle a partir de uma tool que implemente isso (por exemplo, tools escritas na linguagem Java tipicamente implementam isso via driver JDBC do tipo Thin,o Oracle SQL Developer e o Oracle SQLcl são exemplos, mas várias outras existem), mas VIA DE REGRA, a maioria das tools e das linguagens de programação usam um software extra chamado Oracle Client, que deve estar instalado na sua máquina… Não é o seu caso NESTE MOMENTO mas tenha em mente
c) não há formato de data / hora interno no database Oracle : internamente, os dados do tipo DATE (que já incluem uma porção TIME) ou TIMESTAMP são sempre gravados com a informação de data/hora, fração de segundo (para timestamp) e timezone (para TIMESTAMP WITH TIME ZONE) e via parâmetros de sessão OU variáveis de ambiente controlamos a Exibição deles
d) o Oracle NECESSARIAMENTE leva à ferro e fogo a questão de Integridade Transacional dos dados : assim nunca, absolutamente NUNCA, há no Oracle leitura “suja” de dados, ie, de forma alguma uma sessão vai conseguir ler dados que outra sessão introduziu/alterou MAS não comitou, ie, não EFETIVOU a Transação…
e) tal como QUALQUER OUTRO SGBD RELACIONAL, num database controlado pelo software SGBD Oracle vc só consegue acessar e manipular dados via linguagens SQL ou PL/SQL, sejam dados de usuário, sejam dados do funcionamento Interno do database – então, seja vc Programadora, Analista de Sistemas, Engenheira de Dados , DBA, etc, vc TEM que estudar e conhecer ambas as linguagens
f) não é Obrigatório, mas eu RECOMENDO FORTEMENTE que vc conheça E use múltiplas tools cliente : vc disse que hoje já usa Oracle SQL DEVELOPER, recomendo estudar/testar/conhecer/usar um pouco Outras, pode ser por exemplo o SQLPLUS, que já vem instalado junto com o software SGBD ORACLE
Lógico, tem MUITAS COISAS MAIS que vc precisa conhecer, mas estas são algumas que me vêm à cabeça de momento, blz ? E claro, cfrme vc for progredindo, vai perguntando qquer dúvida que tenha, que a gente tenta te ajudar, blz ?
Abraços,
Chiappa
4 de outubro de 2024 às 8:38 pm #177858lucianalopesParticipanteBoa Noite Jose,
Alterei o codigo conforme conversamos, pus o nome em maisculo o nome do arquivo, pus no codigo o erro persiste.
Desisto disso.
declare
l_clob clob;
v_src_offset number:=1;
v_dest_offset number:=1;
l_lang_context number := dbms_lob.default_lang_ctx;
v_inicio number:=1;
l_warning number;
vTamanho_Texto number;
pasta bfile;
begin
pasta:=bfilename(‘TESTETD’,’teste.txt’);
vTamanho_Texto:=dbms_lob.getlength(pasta);
dbms_lob.fileopen(pasta,dbms_lob.lob_readonly);
vTamanho_Texto:=dbms_lob.getlength(pasta);
insert into testeclobxml1(ID, NOME, ARQUIVO) VALUES(2,’teste’,EMPTY_CLOB()) returning arquivo into l_clob;commit;
dbms_lob.loadclobfromfile(l_clob, pasta,vTamanho_Texto,v_dest_offset,v_dest_offset,bfile_csid => dbms_lob.default_csid,
lang_context => l_lang_context,
warning => l_warning);dbms_output.put_line(‘Tamanho do arquivo é:’||dbms_lob.getlength( pasta ));
dbms_output.put_line(‘Bytes lidos e gravados=’ ||dbms_lob.getlength(l_clob));
dbms_lob.fileclose(pasta);
end;Atenciosamente,
Luciana
4 de outubro de 2024 às 9:32 pm #177868lucianalopesParticipanteBoa noite Jose,
A inteligencia do google me respondeu…
Usava um codigo antes(lembrei agora) kkk com writeappend.
so faltou eu criar um texto temporaria com o create temporary.
Mas o que eu queria era pegar as tags e transformar em coluna e os textos em registros, mas e mais trabalhoso e eu nao tenho tempo.
Isso consegui com o JSON como falei
Mas meu tempo esta meio escasso, nao consegui fazer com o xml, vou deixar tudo em uma linha so.
Estou comecando a ver sobre o apex tambem. Mais adiante dou continuidade.
O codigo final ficou
declare
testo2 clob;
textoinsere varchar2(32767);
begin
dbms_lob.createtemporary(testo2,true);
textoinsere:='<root>
<items>
<item>
<name>Item 1</name>
<description>This is a detailed description of item 1. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 1s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 2</name>
<description>This is a detailed description of item 2. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 2s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 3</name>
<description>This is a detailed description of item 3. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 3s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 4</name>
<description>This is a detailed description of item 4. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 4s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 5</name>
<description>This is a detailed description of item 5. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 5s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 6</name>
<description>This is a detailed description of item 6. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 6s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 7</name>
<description>This is a detailed description of item 7. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 7s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 8</name>
<description>This is a detailed description of item 8. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 8s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 9</name>
<description>This is a detailed description of item 9. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 9s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 10</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 11</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 12</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 13</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 14</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 15</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 16</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 17</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 18</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item><item>
<name>Item 19</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 20</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 21</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 22</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 23</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 24</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 25</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 26</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 27</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 28</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 29</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item><item>
<name>Item 1</name>
<description>This is a detailed description of item 1. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 1s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 2</name>
<description>This is a detailed description of item 2. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 2s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 3</name>
<description>This is a detailed description of item 3. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 3s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 4</name>
<description>This is a detailed description of item 4. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 4s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 5</name>
<description>This is a detailed description of item 5. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 5s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 6</name>
<description>This is a detailed description of item 6. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 6s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 7</name>
<description>This is a detailed description of item 7. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 7s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 8</name>
<description>This is a detailed description of item 8. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 8s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 9</name>
<description>This is a detailed description of item 9. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 9s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 10</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 11</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 12</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 13</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 14</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 15</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 16</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 17</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 18</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item><item>
<name>Item 19</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 20</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 21</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 22</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 23</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 24</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 25</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 26</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
<item>
<name>Item 27</name>
<description>This is a detailed description of item 10. This description is deliberately long to ensure the XML document reaches the required length. This part of the description provides information about item 10s features, benefits, and usage scenarios. It is important to have a comprehensive description to fully explain the item.</description>
</item>
</items>
</root>’;
dbms_lob.writeappend(testo2,length(textoinsere),textoinsere);
insert into T_clob(id, nome, texto) values(636,’teste’,testo2);
dbms_lob.freetemporary(testo2);end;
Boa noite jose,
7 de outubro de 2024 às 9:48 am #177898José Laurindo ChiappaModeradorOi – então, na verdade quando vc diz “pus o nome em maisculo o nome do arquivo”, em verdade vc deve se referir ao DIRECTORY, pelo que vejo, certo ? Plz use o CONCEITO/NOME CORRETO sempre : nome de arquivo é uma coisa, nome do DIRECTORY é outra , e nome da PASTA no Windows é outra…
Então,te respondendo, é inescapável : ** SE ** consultando a DBA_DIRECTORIES vc ver que o DIRECTORY existe com o nome correto E apontando para o disco/pasta corretos, consultando a DBA_TAB_PRIVS filtrando a coluna TABLE_NAME pelo nome do DIRECTORY vc VER permissões de READ e de WRITE para o usuário de banco que vc usa (HR, iirc) , *** ENTÃO *** concluímos que seu problema é EXTERNO ao banco, ie, Permissões seja na Pasta seja no arquivo em si – aí é fazer os trabalhos de verificação de Permissões NO WINDOWS, como eu indiquei…. Não há outra Orientação que eu possa te dar….
7 de outubro de 2024 às 10:21 am #177899José Laurindo ChiappaModeradorSó alguns reparos e observações no seu código, talvez te sejam úteis :
1) a variável BFILe vai conter um pointer PARA O ARQUIVO, e NÃO PARA A PASTA, então sugiro não a chamar de PASTA : não pega nada mas isso “soa” mal, é uma complicação extra e indicação de conceito não compreendido
2) o LOADxxxFROMFILE até onde sei NÂO FAZ COMMIT automaticamente, então o COMMIT *** TEM *** que ficar no FIM do código, que aí ele comita tanto o INSERT quanto o LOAD na coluna CLOB
3) tem um bug BEM RUIM no seu código – na chamada à LOAD, vc escreveu :
dbms_lob.loadclobfromfile(l_clob, l_bfile,vTamanho_Texto,v_dest_offset,v_dest_offset,……
Ou seja, PARA DOIS ARGUMENTOS DIFERENTES vc está passando A MESMA VARIÁVEL !!!!!! NÃO FAÇA ISSO, Please, Só PODE dar ruim……
4) NEM TODAS as variáveis citadas / passadas como argumentos na chamado ao LOAD FORAM declaradas no DECLARE : por exemplo, não vi a l_bfile_csid …. Isso é BÁSICO na programação PL/SQL, absolutamente TODAS as variáveis TEM que ser declaradas….
5) veja no meu código que estou passando os argumentos TODOS para a função via => , que é a maneira de não ser Obrigado a seguir a sequência / relação completa de argumentos : SE vc seguir a sequência/lista de argumentos todinha tudo bem, dá certo não usar => , mas Eu Prefiro não arriscar…
Ficaria assim mais ou menos o código corrigido :
DECLARE
l_clob clob;
v_src_offset number:=1;
v_dest_offset number:=1;
l_lang_context number := dbms_lob.default_lang_ctx;
l_warning number;
vTamanho_Texto number;
l_bfile bfile;
l_bfile_csid number := 0;
BEGIN
l_bfile:=bfilename('TESTETD','teste.txt');
vTamanho_Texto:=dbms_lob.getlength(l_bfile);
dbms_lob.fileopen(l_bfile,dbms_lob.lob_readonly);
vTamanho_Texto:=dbms_lob.getlength(l_bfile);
insert into testeclobxml1(ID, NOME, ARQUIVO) VALUES(2,'teste',EMPTY_CLOB()) returning arquivo into l_clob;
--
dbms_lob.loadclobfromfile (
dest_lob => l_clob,
src_bfile => l_bfile,
amount => vTamanho_Texto,
dest_offset => v_dest_offset,
src_offset => v_src_offset,
bfile_csid => l_bfile_csid ,
lang_context=> l_lang_context,
warning => l_warning
);
--
dbms_output.put_line('Tamanho do arquivo é:'||dbms_lob.getlength( l_bfile ));
dbms_output.put_line('Bytes lidos e gravados=' ||dbms_lob.getlength(l_clob));
dbms_lob.fileclose(l_bfile);
commit;
END;
**** DEPOIS **** que vc Realmente tiver checado permissões DENTRO e (PRINCIPALMENTE!!) FORA DO BANCO (ie, na pasta E no arquivo, direto no Windows), rodando esse código corrigido TEM que funcionar, ok ??
7 de outubro de 2024 às 11:14 am #177900lucianalopesParticipanteBom dia Jose,
Busquei um código no Google readaptei usando writeappend e funcionou.
Vou posta- Lopes hoje
7 de outubro de 2024 às 11:20 am #177901lucianalopesParticipanteMas não consigo inserir as linhas da TAG item na coluna item e nome na nome.
Inclui tudo em uma linha so
7 de outubro de 2024 às 1:35 pm #177903José Laurindo ChiappaModeradorPor partes : primeiro, o que o LOADxxLOBFROMFILE é Exatamente o Mesmo que uma rotina que abra o arquivo-texto, leia o LOB em pedaços e grave CADA pedaço no LOB via DBMS_LOB.WRITEAPPEND, que imagino É o que o seu código está fazendo… Certamente, devia ser alguma FALHA na maneira como vc usava o LOADFROMFILE – só posso, DEPOIS que vc realmente verificar permissões TODAS (dentro e FORA do database), e CONFIRMAR que esse arquivo é um arquivo de texto E QUE ele está com as quebras de linhas padrão Windows E QUE o tamanho de linha dele não ultrapassa o limites do LOADFROMFILE, Recomendar que vc rode o código CORRIGIDO que coloquei na énúltima resposta…
Agora, sobre a questão de “inserir as linhas da TAG item na coluna item e nome na nome” : seguinte, isso o LOADFORMFILE ** não faz ** : como eu disse, o que ele faz é ler TODO O ARQUIVO TEXTO indicado E GUARDAR TODOS OS DADOS LIDOS numa coluna CLOB , só e apenas ISSO – não interessa o que tem em cada linha lida, TODAS as linyhas do arquivo serão gravadas numa coluna CLOB e ponto, com essa built-in : vc muito CERTAMENTE ** vai ** ter que programar algo mais específico … Há também um ponto COMUM de acontecer quando se fala em XML, que é : da mesma forma que o XML pode ter cada registro lógico numa só linha, tipo :
<employee><employee_number>7369</employee_number><employee_name>SMITH</employee_name><job>CLERK</job></employee>
<employee><employee_number>7499</employee_number><employee_name>ALLEN</employee_name><job>SALESMAN</job></employee>É ABSOLUTAMENTE Válido vc ter uma tag em cada linha, tipo :
<employee>
<employee_number>7369</employee_number>
<employee_name>SMITH</employee_name>
<job>CLERK</job>
</employee>
….Se vc for usar só as funções primitivas de manipular arquivo (como UTL_FILE ou DBMS_LOB) , eu Acredito que elas NÃO PREVÊEM esse tipo de situação onde o registro lógico está ‘quebrado’ em N linhas, e com elas vc teria que PROGRAMAR MAIS, meter uns IFs e talz controlando isso, OU , o que DEVE ser muito mais fácil, vc pode usar as built-ins de XML do database Oracle (especialmente XMLTABLE e XMLTAG, acredito) : https://oracle-base.com/articles/12c/exteral-tables-and-xmltag-to-load-xml-documents-12cr2 e https://asktom.oracle.com/ords/f?p=100:11:::::P11_QUESTION_ID:9542268300346369670 dão alguns exemplos gerais sobre isso….
7 de outubro de 2024 às 2:10 pm #177904lucianalopesParticipanteBoa tarde Jose,
Não usei o loadfromclobefile, só o criei temporariamente e usei o writeappend.
Para gravar o XML na tabela e dividir colunas e linhas usei o json_ tablet e bulk collect e forall, com as operações lob também.
Mas do XML não consegui
7 de outubro de 2024 às 4:13 pm #177905José Laurindo ChiappaModerador“Não usei o loadfromclobefile, só o criei temporariamente e usei o writeappend.”
Sim, mas os dados ESTAVAM num arquivo texto .XML, então vc TEVE que abrir e ler pedaço por pedaço cada dado do arquivo, e depois adicionar esses dados lidos via DBMS_LOB.WRITEAPPEND, certo ? Isso que eu quis dizer….
“Para gravar o XML na tabela e dividir colunas e linhas usei o json_ tablet e bulk collect e forall, com as operações lob também. Mas do XML não consegui.”
repito : embora eu não trabalhe direto com isso, até onde sei, da mesma maneira que vc tem o JSON_TABLE (TABLE, e não TABLET) para transformar dados em JSON, vc TEM o XMLTABLE para fazer o mesmo num XML : os links de exemplo que te passei MOSTRAM isso…
-
AutorPosts
- Você deve fazer login para responder a este tópico.