Pular para o conteúdo
  • Este tópico contém 9 respostas, 2 vozes e foi atualizado pela última vez 16 anos atrás por Anônimo.
Visualizando 10 posts - 1 até 10 (de 10 do total)
  • Autor
    Posts
  • #92676
    Anônimo

      Olá amigos tudo bem…

      Seguinte to com um problema aqui em directorias no Oracle, estou precisando selecionar qualquer diretoria onde o Oracle está instalado pois sei que tem uma forma de fazer isso com C dentro do Oracle mas estou com grandes problemas pois não sei como farei isso.
      create directory não tem como eu fazer pois isso teria que ser feito para todas as diretorias e não seria uma falha de segurança no servidor.
      Preciso de alguma função em C, Java ou algo que atraves do Oracle eu consiga usar essa função ou procedimento para entrar na diretoria criar ficheiros importar ficheiros para tabelas.
      Alguém pode me dar uma ajuda.

      Obrigado!

      #92679
      diegolenhardt
      Participante

        fiz uma pesquisa com
        create or replace library,

        encontrei esse post:

        http://glufke.net/oracle/viewtopic.php?t=73

        acho que já resolve,

        poderia criar um directory no oracle, e no linux criar links simbolicos pra dentro desse directory, dessa forma soh precisaria colocar um unico diretorio no UTL_FILE_DIR, com as devidas permissoes,

        #92681
        Anônimo

          Ok eu acho que agora resolvo esse problema.

          Obrigado

          #92727
          Anônimo

            Bom caro Diego estou com um problema em abrir os ficheiros link do unix, fiz as configurações todos para criar o link que aponta onde o ficheiro vai estar em outros diretorios para que eu não tenha que criar no Oracle varios directories.
            Mas usando o dbms_lob.open ou fileopen me retorna um erro dizendo que diretorio errado ou ficheiro não existe, já usei o FILEEXISTS e me retorna 1 com isso tira a minha duvida se está realmente encontrando o ficheiro e se o diretorio e ficheiro existe.
            Desta forma não sei o que pode ser pois quandchega na linha que tem dbms_lob.open rebenta e me envia o tal erro:
            ORA-22288: file or LOB operation FILEOPEN failed

            Será que pode me dar uma luz o que poderia eu fazer para contornar isso.

            Abraços

            #92740
            diegolenhardt
            Participante

              veja o codigo abaixo,

              DECLARE
              f_lob BFILE := BFILENAME('BARRAGENS','TAIO_P03_28102009_10_15.JPG');
              b_lob BLOB;
              Lob BLOB;
              Length INTEGER;

              BEGIN

              SELECT X INTO b_lob
              FROM mydocs
              WHERE A = 1
              FOR UPDATE;

              -- Open the LOBs.
              dbms_lob.open(f_lob, dbms_lob.file_readonly);
              dbms_lob.open(b_lob, dbms_lob.lob_readwrite);
              dbms_lob.loadfromfile
              (b_lob, f_lob, dbms_lob.getlength(f_lob));
              -- Close the LOBs.
              dbms_lob.close(b_lob);
              dbms_lob.close(f_lob);

              COMMIT;

              -- Select the LOB:
              -- SELECT X INTO Lob FROM mydocs;

              /*
              -- Opening the LOB is optional.
              DBMS_LOB.OPEN (Lob, DBMS_LOB.LOB_READONLY);
              -- Get the length of the LOB.
              length := DBMS_LOB.GETLENGTH(Lob);
              IF length IS NULL THEN
              DBMS_OUTPUT.PUT_LINE('LOB is null.');
              ELSE
              DBMS_OUTPUT.PUT_LINE('The length is '|| length);
              END IF;
              -- Closing the LOB is mandatory if you have opened it.
              DBMS_LOB.CLOSE (Lob);*/

              END;

              #92741
              Anônimo

                Olá Diego,

                Desta maneira eu não conseguiria pois hoje aqui na empresa já tem ferramentas que enviam e-mail e procedimentos do oracle que usa um script em perl para enviar os email de qualquer diretoria sendo assim eu teria que criar vários diretorios no oracle e isso estava fora de cogitação pois teria que rever muito codigo e programas de report e log então a solução seria abrir de qualquer diretorio carregar em uma variavel e depois escrever o corpo do email anexando o ficheiro independente do formato.
                Para conseguir fazer isso tive que usar uma biblioteca em C dentro do oracle onde eu executar comando unix e com isso criava links dos ficheiros usando bfilename ou utl_file só que com o bfilename estava gerando um erro ao abrir o ficheiro e quando usava o utl_file eu conseguia um bom resultado com utl_file.get_raw e foi assim que consegui carregar o ficheiro de qualquer directoria.

                Caso alguém tenha algum problema em carregar ficheiros de qualquer diretoria eu tento passar o codigo comentado.

                Obrigado.

                #92742
                diegolenhardt
                Participante

                  Não precisa passar como parametro o DIRECTORY, pode passar o caminho direto também..

                  #92745
                  Anônimo

                    Oi Diego,

                    Como assim poderia passar o caminho direto?
                    quer dizer que posso fazer isso?
                    f_lob BFILE := BFILENAME(‘/aplic/mat/docs/’,’teste.pdf’);

                    mesmo que eu não tenha criado um objecto directory com essa diretoria
                    pois eu fiz um teste aqui e diz que o caminho não foi encontrado.

                    #92751
                    diegolenhardt
                    Participante

                      Assim também funciona sim, veja se as permissões estão corretas, e se o parametro UTL_FILE_DIR tem esse valor incluido:

                      /aplic/mat/docs

                      tira a barra (/) do final,

                      f_lob BFILE := BFILENAME(‘/aplic/mat/docs’,’teste.pdf’);

                      #92775
                      Anônimo

                        Pois justamente Diego,

                        Se eu tiver UTL_FILE_DIR com esse valor consigo declarando o caminho direto mas o meu problema é que nem sempre as diretorias tinha um objeto oracle criado (directory) e nem sempre eu tinha privs de leitura no directorio criado no oracle sendo assim não conseguia selecionar os ficheiros em determinados diretorios.
                        O que eu tinha que fazer era criar uma API onde independente de onde estivesse o ficheiro eu teria que conseguir carregalo para o oracle mesmo que eu não tenha UTL_FILE_DIR ou um Directory criado.
                        A solução foi criar links (ln -s) atravez de um diretorio onde ficaria especifico para o oracle ler e gravar esses links pois assim mesmo que a pessoa que fosse selecionar um ficheiro que não estava criado em objeto oracle ele criaria um link até aquele ficheiro e desta forma usando UTL_FILE eu consigo carregar qualquer ficheiro em qualquer diretoria mesmo que não exista em Oracle.
                        Não sei se conseguiram entender 🙂

                        Mas a intensão de tudo isso é porque eu tenho que enviar e-mail com anexos e sempre que o usuario quiser enviar um e-mail ele não teria que saber se tem ou não uma diretoria criada no oralce ou se ele tem privs para entrar nessa diretoria.
                        Simplesmente iria dizer qual diretoria e o nome do ficheiro que está nessa diretoria sem se preocupar com mais nada.

                      Visualizando 10 posts - 1 até 10 (de 10 do total)
                      • Você deve fazer login para responder a este tópico.