powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Java Archive
47 сообщений из 47, показаны все 2 страниц
Java Archive
    #36784450
alient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать архивирование нужного файла в оракле?
Может ктото встречал нужный ява код для этого ?? если да то поделитесь!
...
Рейтинг: 0 / 0
Java Archive
    #36784669
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alient,

Именно архивирование или сжатие? utl_compress.
...
Рейтинг: 0 / 0
Java Archive
    #36784704
alient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаем класс add

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import java.awt.*;
import java.applet.*;
import java.lang.*;
public class add {
public static void archiv(String zipFileName, String fileName) throws IOException {
       File zipFile = new File(zipFileName);
       File tmpFile = File.createTempFile("zip", "tmp");
       File newFile = new File(fileName);
       byte[] buffer = new byte[ 8192 ];
       int readed;
       ZipOutputStream zipOutputStream = new ZipOutputStream(
           new BufferedOutputStream(
               new FileOutputStream(tmpFile)));
       try {
           if (zipFile.exists()) {
               ZipInputStream zipInputStream = new ZipInputStream(
                   new BufferedInputStream(
                       new FileInputStream(zipFile)));
               try {
                   ZipEntry entry;
                   while ((entry = zipInputStream.getNextEntry()) != null){
                       if (entry.getName().equals(newFile.getName())) {
                           continue;
                       }
                       ZipEntry newEntry = new ZipEntry(entry);
                       zipOutputStream.putNextEntry(newEntry);
                       while ((readed = zipInputStream.read(buffer)) >  0 ) {
                           zipOutputStream.write(buffer,  0 , readed);
                       }
                       zipOutputStream.closeEntry();
                   }
               }
               finally {
                   zipInputStream.close();
               }
           }
           InputStream fileInputStream = new BufferedInputStream(
               new FileInputStream(newFile));
           try {
               /*System.out.printf("Adding %s\n", fileName);*/
               ZipEntry newEntry = new ZipEntry(newFile.getName());
               newEntry.setSize(newFile.length());
               newEntry.setTime(newFile.lastModified());
               zipOutputStream.putNextEntry(newEntry);
               while ((readed = fileInputStream.read(buffer)) >  0 ) {
                   zipOutputStream.write(buffer,  0 , readed);
               }
               zipOutputStream.closeEntry();
           }
           finally {
               fileInputStream.close();
           }
       }
       finally {
           zipOutputStream.close();
       }
       if (zipFile.exists()) {
           zipFile.delete();
       }
       tmpFile.renameTo(zipFile);
   }
}

Терь создаем процедуру

Код: plaintext
1.
2.
3.
4.
PROCEDURE ADD1 (zipFileName  IN  VARCHAR2,
               fileName    IN  VARCHAR2) 
as language java 
name 'add.archiv(java.lang.String, java.lang.String)';

И теперь вызов на сервере

exec add1('c:\test\input\d09_03.zip','c:\test\input\d09_03.dbf'); делает нам архив ну разархиривоние примерно в таком же духе - ява опять таки рулит!
...
Рейтинг: 0 / 0
Java Archive
    #36784763
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alientява опять таки рулит!А смысл архивировать базой файлы операционной системы? zip слишком мало ресурсов жрет или не требует программирования?
...
Рейтинг: 0 / 0
Java Archive
    #36785166
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдруг кому пригодится...
multifile zip

Java source
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
create or replace and compile java source named js_zip as
-- author: d.nemolchev  09 . 2006 
 import  java.io.*;
 import  oracle.sql.*;
 import  java.util.zip.*;
 import  java.util.*;

 public   class  J_Zip
{
   static  ArrayList Names_ =  new  ArrayList();
   static  ArrayList Contents_ =  new  ArrayList();
   static   byte [] ZipContent_;
  
   public   static   void  Clear()
  {
    Names_.clear();
    Contents_.clear();
  }
  
   public   static   void  SetZipContent(oracle.sql.BLOB zip)
  {
     try {
      ZipContent_ = zip.getBytes( 1 , ( int )zip.length());
      Clear();
    } catch (java.sql.SQLException e){
      System.out.println(e);
    }
  }
  
   public   static   void  GetZipContent(oracle.sql.BLOB[] zip)
  {
     try {
      zip[ 0 ].putBytes( 1 , ZipContent_);
    } catch (java.sql.SQLException e){
      System.out.println(e);
    }
  }
  
   public   static   void  AddEntry(String name, oracle.sql.BLOB entry)
  {
     try {
      Names_.add((Object)name);
      Contents_.add((Object)entry.getBytes( 1 , ( int )entry.length()));
    } catch (java.sql.SQLException e){
      System.out.println(e);
    }
  }
  
   public   static   void  DelEntry(String name)
  {
     for ( int  i =  0 ; i < Names_.size(); i++)
    {
       if (name.compareTo((String)Names_.get(i)) !=  0 )
         continue ;
      Names_.remove(i);
      Contents_.remove(i);
       break ;
    }
  }
  
   public   static   int  EntryCount()
  {
     return  Names_.size();
  }
  
   public   static   void  UnPack( int  WithContent)
  {
     try {
      ZipInputStream in =  new  ZipInputStream( new  ByteArrayInputStream(ZipContent_));
      ZipEntry ze;
       while ((ze = in.getNextEntry()) !=  null )
      {
        Names_.add((Object)ze.getName());
         if (WithContent !=  0 )
        {
          ByteArrayOutputStream out =  new  ByteArrayOutputStream();
           byte [] tmp =  new   byte [ 1024 ];
           int  n;
           while ((n = in.read(tmp)) >=  0 )
            out.write(tmp,  0 , n);
          Contents_.add((Object)out.toByteArray());
        }
      }
    } catch (java.io.IOException e){
      System.out.println(e);
    }
  }
  
   public   static   void  GetEntry(String name, oracle.sql.BLOB[] entry)
  {
     try {
       for ( int  i =  0 ; i < Names_.size(); i++)
      {
         if (name.compareTo((String)Names_.get(i)) !=  0 )
           continue ;
        entry[ 0 ].trim( 0 );
        entry[ 0 ].putBytes( 1 , ( byte [])Contents_.get(i));
         break ;
      }
    } catch (java.sql.SQLException e){
      System.out.println(e);
    }
  }
  
   public   static   void  GetEntry( int  num, oracle.sql.BLOB[] entry)
  {
     try {
      entry[ 0 ].trim( 0 );
      entry[ 0 ].putBytes( 1 , ( byte [])Contents_.get(num));
    } catch (java.sql.SQLException e){
      System.out.println(e);
    }
  }
  
   public   static  String GetName( int  num)
  {
     return  (String)Names_.get(num);
  }
  
   public   static   void  GetNames(oracle.sql.CLOB[] out)
  {
    String str =  new  String();
     try {
       for ( int  i =  0 ; i < Names_.size(); i++)
        str = str + (String)Names_.get(i) + "\n";
      out[ 0 ].trim( 0 );
      out[ 0 ].putString( 1 , str);
      System.out.println(Names_.size());
    } catch (java.sql.SQLException e){
      System.out.println(e);
    }
  }
  
   public   static   void  GetNames(oracle.sql.BLOB zip, oracle.sql.CLOB[] out)
  {
     try {
      ZipInputStream in =  new  ZipInputStream(zip.getBinaryStream());
      ZipEntry ze;
       while ((ze = in.getNextEntry()) !=  null )
        out[ 0 ].putString(out[ 0 ].length() +  1 ,ze.getName() + "\n");
    } catch (java.sql.SQLException e){
      System.out.println(e);
    } catch (java.io.IOException e){
      System.out.println(e);
    }
  }
  
   public   static   void  Pack()
  {
     try {
      ByteArrayOutputStream out =  new  ByteArrayOutputStream();
      ZipOutputStream zip =  new  ZipOutputStream(out);
       for ( int  i =  0 ; i < Names_.size(); i++)
      {
        zip.putNextEntry( new  ZipEntry((String)Names_.get(i)));
        zip.write(( byte [])Contents_.get(i),  0 , (( byte [])Contents_.get(i)).length);
        zip.closeEntry();
      }
      zip.close();
      ZipContent_ = out.toByteArray();
    } catch (java.io.IOException e){
      System.out.println(e);
    }
  }
  
   public   static   void  UnPackEntry(oracle.sql.BLOB in, java.lang.String name, oracle.sql.BLOB[] out)
  {
     try {
      ZipInputStream zip_in =  new  ZipInputStream(in.getBinaryStream());
      ZipEntry ze = zip_in.getNextEntry();
       boolean  f_exit = false;
       while (ze !=  null  && !f_exit)
      {
         if (name.compareTo(ze.getName()) ==  0 )
        {
          OutputStream outBuffer = out[ 0 ].getBinaryOutputStream();
           byte [] tmpBuffer =  new   byte [ 1024 ];
           int  n;
           while  ((n = zip_in.read(tmpBuffer)) >=  0 )
            outBuffer.write(tmpBuffer,  0 , n);
          outBuffer.close();
          f_exit = true;
        }
        ze = zip_in.getNextEntry();
      }
    }
     catch  (java.sql.SQLException e)
      {System.out.println(e);}
     catch  (java.io.IOException e)
      {System.out.println(e);}
  }
  
}


Package
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
CREATE OR REPLACE Package mfz Is

  /*author: d.nemolchev 09.2006*/

  Procedure Clear;

  Procedure SetZipContent(iContent Blob);

  Procedure GetZipContent(oContent In Out Nocopy Blob);

  Procedure AddEntry
  (
    iName    Varchar2,
    iContent Blob
  );

  Procedure DelEntry(iName Varchar2);

  Function EntryCount Return Number;

  Procedure UnPack(iNamesOnly Number);

  Procedure GetEntry
  (
    iName    Varchar2,
    oContent In Out Blob
  );

  Procedure GetEntry
  (
    iNum     Number,
    oContent In Out Blob
  );

  Function GetName(iNum Number) Return Varchar2;

  Procedure GetNames(oNames In Out Nocopy Clob);

  Procedure GetNames
  (
    iZip   Blob,
    oNames In Out Nocopy Clob
  );

  Procedure Pack;

  Procedure UnPackEntry
  (
    iZip     Blob,
    iName    Varchar2,
    oContent In Out Nocopy Blob
  );

End; -- mfz


Package body
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
CREATE OR REPLACE Package Body mfz Is

  /*author: d.nemolchev 09.2006*/

  Procedure Clear As
    Language Java Name 'J_Zip.Clear()';

  Procedure SetZipContent(iContent Blob) As
    Language Java Name 'J_Zip.SetZipContent(oracle.sql.BLOB)';

  Procedure GetZipContent(oContent In Out Nocopy Blob) As
    Language Java Name 'J_Zip.GetZipContent(oracle.sql.BLOB[])';

  Procedure AddEntry
  (
    iName    Varchar2,
    iContent Blob
  ) As
    Language Java Name 'J_Zip.AddEntry(java.lang.String, oracle.sql.BLOB)';

  Procedure DelEntry(iName Varchar2) As
    Language Java Name 'J_Zip.DelEntry(String)';

  Function EntryCount Return Number As
    Language Java Name 'J_Zip.EntryCount() return int';

  Procedure UnPack(iNamesOnly Number) As
    Language Java Name 'J_Zip.UnPack(int)';

  Procedure GetEntry
  (
    iName    Varchar2,
    oContent In Out Blob
  ) As
    Language Java Name 'J_Zip.GetEntry(java.lang.String, oracle.sql.BLOB[])';

  Procedure GetEntry
  (
    iNum     Number,
    oContent In Out Blob
  ) As
    Language Java Name 'J_Zip.GetEntry(int, oracle.sql.BLOB[])';

  Function GetName(iNum Number) Return Varchar2 As
    Language Java Name 'J_Zip.GetName(int) return java.lang.String';

  Procedure GetNames(oNames In Out Nocopy Clob) As
    Language Java Name 'J_Zip.GetNames(oracle.sql.CLOB[])';

  Procedure GetNames
  (
    iZip   Blob,
    oNames In Out Nocopy Clob
  ) As
    Language Java Name 'J_Zip.GetNames(oracle.sql.BLOB, oracle.sql.CLOB[])';

  Procedure Pack As
    Language Java Name 'J_Zip.Pack()';

  Procedure UnPackEntry
  (
    iZip     Blob,
    iName    Varchar2,
    oContent In Out Nocopy Blob
  ) As
    Language Java Name 'J_Zip.UnPackEntry(oracle.sql.BLOB, java.lang.String, oracle.sql.BLOB[])';

End; -- mfz
...
Рейтинг: 0 / 0
Java Archive
    #36785175
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d.nemolchev
Package body
А без боди можно было обойтись. Хотя иногда полезно поабстрагировать декларацией на реализацию.
...
Рейтинг: 0 / 0
Java Archive
    #36785185
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,
пасиба, никогда не обращал внимания на эту возможность.
Век живи - век учись...
...
Рейтинг: 0 / 0
Java Archive
    #36785192
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. если требуется архивировать многоуровневую структуру, то имена файлов внутри папок надо задавать в виде
<FolderName>("\"|"/")[<FolderName2>("\"|"/")[...]]filename.ext
...
Рейтинг: 0 / 0
Java Archive
    #36785531
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alient,

Если кто не знает, штатные классы Java из пакета java.util.zip не работают с именами файлов на русском языке, да и не только на русском. В пакете Apache ANT org.apache.tools.zip есть аналогичные классы, но "пофиксенные", все имена и методы классов совпадают со штатными.
...
Рейтинг: 0 / 0
Java Archive
    #36785948
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick
Если кто не знает, штатные классы Java из пакета java.util.zip не работают с именами файлов на русском языке, да и не только на русском. В пакете Apache ANT org.apache.tools.zip есть аналогичные классы, но "пофиксенные", все имена и методы классов совпадают со штатными.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
SQL> conn ****/****@db11
Соединено.
SQL> select * from v$version;

BANNER                                                                          
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release  11 . 2 . 0 . 1 . 0  - Production          
PL/SQL Release  11 . 2 . 0 . 1 . 0  - Production                                          
CORE	 11 . 2 . 0 . 1 . 0 	Production                                                      
TNS for  32 -bit Windows: Version  11 . 2 . 0 . 1 . 0  - Production                         
NLSRTL Version  11 . 2 . 0 . 1 . 0  - Production                                          

SQL> set serverout on
SQL> Declare
   2     z Blob;
   3     c Raw( 100 ) := utl_raw.copies('AA55',  50 );
   4   Begin
   5     dbms_lob.createtemporary(z, True);
   6     dbms_lob.writeappend(z, utl_raw.length(c), c);
   7     mfz.Clear;
   8     For i In  1  ..  10 
   9     Loop
  10       mfz.AddEntry('Папка_' || i || '\' || 'Файл_' || i || '.дат', z);
  11     End Loop;
  12     mfz.Pack;
  13     dbms_lob.trim(z,  0 );
  14     mfz.GetZipContent(z);
  15     mfz.Clear;
  16     mfz.SetZipContent(z);
  17     mfz.UnPack( 0 );
  18     For i In  0  .. mfz.EntryCount -  1 
  19     Loop
  20       dbms_output.put_line(mfz.GetName(i));
  21     End Loop;
  22     dbms_lob.freetemporary(z);
  23   End;
  24   /
Папка_1\Файл_1.дат                                                              
Папка_2\Файл_2.дат                                                              
Папка_3\Файл_3.дат                                                              
Папка_4\Файл_4.дат                                                              
Папка_5\Файл_5.дат                                                              
Папка_6\Файл_6.дат                                                              
Папка_7\Файл_7.дат                                                              
Папка_8\Файл_8.дат                                                              
Папка_9\Файл_9.дат                                                              
Папка_10\Файл_10.дат                                                            

Процедура PL/SQL успешно завершена.

SQL> 
Garrick, уточните версию и платформу...
У меня zip нормально работает с версии 9.2.0.5, опробован был на HP-UX & Win32...
...
Рейтинг: 0 / 0
Java Archive
    #36785980
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс... Искажение имен имеет место быть :-(
...
Рейтинг: 0 / 0
Java Archive
    #36786098
Тупой Пух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d.nemolchevУпс... Искажение имен имеет место быть :-(

а так:
Код: plaintext
1.
    zipOutputStream.setEncoding("CP866");
...
Рейтинг: 0 / 0
Java Archive
    #36786176
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тупой Пух,

setEncoding - эта крышка не от той кастрюли, не от java.util.zip...
...
Рейтинг: 0 / 0
Java Archive
    #36786709
Тупой Пух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d.nemolchevТупой Пух,

setEncoding - эта крышка не от той кастрюли, не от java.util.zip...

от той - setEncoding это метод ZipOutputStream
...
Рейтинг: 0 / 0
Java Archive
    #36786753
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тупой Пух
от той - setEncoding это метод ZipOutputStream
Где? java.util.zip.ZipOutputStream
А вот тут есть org.apache.tools.zip.ZipOutputStream как я и "говорил"
...
Рейтинг: 0 / 0
Java Archive
    #36787012
Тупой Пух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickТупой Пух
от той - setEncoding это метод ZipOutputStream
Где? java.util.zip.ZipOutputStream
А вот тут есть org.apache.tools.zip.ZipOutputStream как я и "говорил"

Да, действительно, я ошибся .....

Надо будет поэксперементировать: нельзя ли в конструктор java.util.zip.ZipEntry передавать уже заранее перекодированную в CP866 строку с именем файла.
...
Рейтинг: 0 / 0
Java Archive
    #36787234
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тупой Пухнельзя ли в конструктор java.util.zip.ZipEntry передавать уже заранее перекодированную в CP866 строку с именем файла.
Сомневаюсь...
Первая мысль моя была такой же, но конструктор java.util.zip.ZipEntry принимает UTF-имя файла, а для не-латиницы это 2*length байт.
Т.е. в принципе можно попробовать раскорячиться и подсунуть имя с четной длиной да и то если не станет вываливаться валидация по существованию соответствующих UTF-Char-ов.
Но такой прием считаю неприемлимым :-( ...
...
Рейтинг: 0 / 0
Java Archive
    #36787236
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
офф
Тупой Пухпередавать уже заранее перекодированную в CP866 строку с именем ф Э йла.
так точнее ...
...
Рейтинг: 0 / 0
Java Archive
    #36787244
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем в 1.4 конструктор OutputStreamWriter до указания Charset-а они допилили, а вот конструктор ZipEntry - не догадались...
...
Рейтинг: 0 / 0
Java Archive
    #36787481
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте пакет от ANT'а и не парьтесь.
...
Рейтинг: 0 / 0
Java Archive
    #36795267
alient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d.nemolchev,

Решил протестировать ваш ява класс . Но на мои попытки разархивировать зип файл чтото начало ругаться.

Код: plaintext
1.
exec mfz.unpack('C:\test\input\d09.zip');

Обьясните плз как пользоваться если я чтото не понимаю? Надо извлечь архив C:\test\input\d09.zip как вы понимаете
...
Рейтинг: 0 / 0
Java Archive
    #36795306
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alientНо на мои попытки разархивировать зип файл чтото начало ругатьсяА у меня все ок, вполне ожидаемая реакция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> exec mfz.unpack('C:\test\input\d09.zip')
BEGIN mfz.unpack('C:\test\input\d09.zip'); END;

      *
ERROR at line  1 :
ORA- 06550 : line  1 , column  7 :
PLS- 00201 : identifier 'MFZ.UNPACK' must be declared
ORA- 06550 : line  1 , column  7 :
PL/SQL: Statement ignored
...
Рейтинг: 0 / 0
Java Archive
    #36795352
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alient,

пост от 11 авг 10, 13:46 в этой ветке посмотрите внимательно.
Строки 7-14 - создание зипа, 15-21 - чтение зипа (кроме GetName в пакете есть еще GetEntry и UnpackEntry)
Этот пакет работает с zip-контентом, лежащим в BLOB-ах, а не в файловой системе...
...
Рейтинг: 0 / 0
Java Archive
    #36795365
alient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А адаптировать для файловой системы?
Мне в блобы не приходилось помещать архивы- в каких случаях это приходится делать?
...
Рейтинг: 0 / 0
Java Archive
    #36795391
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alientА адаптировать для файловой системы?
Мне в блобы не приходилось помещать архивы- в каких случаях это приходится делать?А для файловой системы есть более эффективные утилиты упаковки файлов, чем oracle.exe. И, главное, бесплатные.
...
Рейтинг: 0 / 0
Java Archive
    #36795692
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alientА адаптировать для файловой системы?
Мне в блобы не приходилось помещать архивы- в каких случаях это приходится делать?
э-э-э... пакет выложен "as is", никому не навязывается и доработка по заявкам телезрителей не планируется...
Я просто им поделился с Вами...
Если Вам необходима от него дополнительная функциональность - можете допилить его как Вам заблагорассудится (только тогда желательно ниже строчек "-- author" сделать пометку о том, что пакет доработан не мною...
Но если очень хочется работать с зипами, лежащими в файловой системе (сервера, разумеется), то советую пошукать в документации описание функции BFILENAME, а также процедуры loadblobfromfile пакета dbms_lob и пакет utl_file - жизнь наладится..
...
Рейтинг: 0 / 0
Java Archive
    #36796167
alient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
import java.io.BufferedInputStream;
   import java.io.BufferedOutputStream;
   import java.io.FileInputStream;
   import java.io.FileOutputStream;
   import java.io.IOException;
   import java.io.InputStream;
   import java.util.Collection;
   import java.util.Enumeration;
   import java.util.zip.ZipEntry;
   import java.util.zip.ZipFile;
   import java.util.zip.ZipOutputStream;
  
  	  public class zip_util {
  
      
    public static void unzip(
      String zipFilename, Collection filenames, String outdir
  	    ) throws IOException {
      unzip(
        zipFilename,
        (String[])filenames.toArray(new String[filenames.size()]),
        outdir
      );
    }
  
    public static void unzip(
      String zipFilename, String[] filenames, String outdir
  	    ) throws IOException  {
  
      ZipFile zipFile = new ZipFile(zipFilename);
      Enumeration entries = zipFile.entries();
  
  	  L1: while(entries.hasMoreElements()) {
        ZipEntry entry = (ZipEntry)entries.nextElement();
  
          for (int i =  0 ; i < filenames.length; i++) {
  	          if (entry.getName().equals(filenames[i])) {
              byte[] buffer = new byte[ 1024 ];
              int len;
 
              InputStream zipin = zipFile.getInputStream(entry);
              BufferedOutputStream fileout = new BufferedOutputStream(
                new FileOutputStream(outdir + "\\"+filenames[i])
              );
  
              while((len = zipin.read(buffer)) >=  0 )
                fileout.write(buffer,  0 , len);
  
            zipin.close();
             fileout.flush();
             fileout.close();
 
             continue L1;
           }
      }
       }
   }
 
 	    public static void unzip1(String zipFilename, String outdir) throws IOException {
     ZipFile zipFile = new ZipFile(zipFilename);
     Enumeration entries = zipFile.entries();
 
 	      while(entries.hasMoreElements()) {
       ZipEntry entry = (ZipEntry)entries.nextElement();
       byte[] buffer = new byte[ 1024 ];
         int len;
 
       InputStream zipin = zipFile.getInputStream(entry);
       BufferedOutputStream fileout = new BufferedOutputStream(
         new FileOutputStream(outdir + "\\" +entry.getName())
       );
 
       while((len = zipin.read(buffer)) >=  0 )
         fileout.write(buffer,  0 , len);
 
       zipin.close();
       fileout.flush();
       fileout.close();
     }
   }
 }


Код: plaintext
1.
2.
3.
4.
PROCEDURE EXTR1 (zipFileName  IN  VARCHAR2,
               uotdir    IN  VARCHAR2) 
as language java 
name 'extr.extract(java.lang.String, java.lang.String)';
Есть и другие средства но могут те прислать 1000 файлов и нада их разпаковать переименовать и засунуть куда надо а потом еще и снова упаковать - думаю эти процедуры и класы будут полезны и они работают 100%. А если кому пригодилось пусть тут отметит.
...
Рейтинг: 0 / 0
Java Archive
    #36796237
d.nemolchev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alient,
+1
спс
берем в копилку.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Java Archive
    #39649752
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нужно помещать в архив куски текста, генерируемые на PL/SQL (Oracle 11g). Я пытаюсь сделать это так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create or replace and compile java source named "JZip" as
import java.io.*;
import java.util.zip.*;
import oracle.sql.BLOB;

public class JZip
{ 
   public static BLOB AddToArchive(BLOB pArchive, String pFileName, BLOB pFile)
   throws Exception
   {  ByteArrayOutputStream out = new ByteArrayOutputStream((byte[])pArchive);
      ZipOutputStream zip = new ZipOutputStream(out);
      zip.putNextEntry(new ZipEntry(pFileName));
      zip.write((byte[])pFile.getBytes(1, (int)pFile.length()), 0,
        ((byte[])pFile.getBytes(1, (int)pFile.length())).length());
      zip.closeEntry();
      zip.close();
      return out.toByteArray();
   }
}



При компиляции выдаётся сообщение "Compiled with errors".

Код: plsql
1.
select text from user_errors where name='JZip' order by sequence;

выдаёт следующее:

ORA-29535: source requires recompilation
JZip:9: inconvertible types
found : oracle.sql.BLOB
required: byte[]
{ ByteArrayOutputStream out = new ByteArrayOutputStream((byte[])pArchive);
^
JZip:13: cannot find symbol
symbol : method length()
location: class byte[]
((byte[])pFile.getBytes(1, (int)pFile.length())).length());
^
JZip:16: incompatible types
found : byte[]
required: oracle.sql.BLOB
return out.toByteArray();
^
3 errors

а если перед преобразованием в массив байтов преобразовывать в Object:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create or replace and compile java source named "JZip" as
import java.io.*;
import java.util.zip.*;
import oracle.sql.BLOB;

public class JZip
{ 
   public static BLOB AddToArchive(BLOB pArchive, String pFileName, BLOB pFile)
   throws Exception
   {  ByteArrayOutputStream out = new ByteArrayOutputStream((byte[])(Object)pArchive);
      ZipOutputStream zip = new ZipOutputStream(out);
      zip.putNextEntry(new ZipEntry(pFileName));
      zip.write((byte[])(Object)pFile.getBytes(1, (int)pFile.length()), 0,
        ((byte[])(Object)pFile.getBytes(1, (int)pFile.length())).length());
      zip.closeEntry();
      zip.close();
      return out.toByteArray();
   }
}



то тогда получаю вот такие ошибки:
ORA-29535: source requires recompilation
JZip:9: cannot find symbol
symbol : constructor ByteArrayOutputStream(byte[])
location: class java.io.ByteArrayOutputStream
{ ByteArrayOutputStream out = new ByteArrayOutputStream((byte[])(Object)pArchive);
^
JZip:13: cannot find symbol
symbol : method length()
location: class byte[]
((byte[])(Object)pFile.getBytes(1, (int)pFile.length())).length());
^
JZip:16: incompatible types
found : byte[]
required: oracle.sql.BLOB
return out.toByteArray();
^
3 errors

Как можно решить эту проблему?
...
Рейтинг: 0 / 0
Java Archive
    #39649761
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PasticКак можно решить эту проблему?Окончить курсы по джаве.
...
Рейтинг: 0 / 0
Java Archive
    #39649999
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-PasticКак можно решить эту проблему?Окончить курсы по джаве.

Не по джаве, а по яве.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
create or replace and compile java source named "JZip" as
import java.io.*;
import java.sql.*;
import java.util.zip.*;
import oracle.sql.CLOB;
import oracle.jdbc.*;

public class JZip
{ 
   public CLOB AddToArchive(CLOB pArchive, String pFileName, CLOB pFile) throws Exception
   {  ByteArrayOutputStream out = new ByteArrayOutputStream((int)pArchive.length());
      out.write(pArchive.getBytes(), 0, (int)pArchive.length());

      // Добавление файла в архив
      ZipOutputStream zip = new ZipOutputStream(out);
      zip.putNextEntry(new ZipEntry(pFileName));
      zip.write(pFile.getBytes(), 0, (int)pFile.length());
      zip.closeEntry();
      zip.flush();
      zip.close();
      
      // Преобразование out в CLOB
      Connection conn = new OracleDriver().defaultConnection();
      CLOB vRes = CLOB.createTemporary(conn, false, CLOB.DURATION_SESSION);
      vRes.open(CLOB.MODE_READWRITE);
      OutputStream tmp = (OutputStream)vRes.setAsciiStream(0L);
      tmp.write(out.toByteArray());
      tmp.flush();
      tmp.close();
      vRes.close();
      
      return vRes;
   }
}
...
Рейтинг: 0 / 0
Java Archive
    #39650001
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic // Преобразование out в CLOB

Одному мне кажется, что сохранять Zip файл в C LOB совершенно НЕ лучшая идея. А в чем-то, даже, смахивает на диверсию.
...
Рейтинг: 0 / 0
Java Archive
    #39650010
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevPastic // Преобразование out в CLOB

Одному мне кажется, что сохранять Zip файл в C LOB совершенно НЕ лучшая идея. А в чем-то, даже, смахивает на диверсию.

Ну, можно и в BLOB, если нужно:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
create or replace and compile java source named "JZip" as
import java.io.*;
import java.sql.*;
import java.util.zip.*;
import oracle.sql.CLOB;
import oracle.sql.BLOB;
import oracle.jdbc.*;

public class JZip
{ 
   public BLOB AddToArchive(BLOB pArchive, String pFileName, CLOB pFile) throws Exception
   {  ByteArrayOutputStream out = new ByteArrayOutputStream((int)pArchive.length());
      out.write(pArchive.getBytes(), 0, (int)pArchive.length());

      // Добавление файла в архив
      ZipOutputStream zip = new ZipOutputStream(out);
      zip.putNextEntry(new ZipEntry(pFileName));
      zip.write(pFile.getBytes(), 0, (int)pFile.length());
      zip.closeEntry();
      zip.flush();
      zip.close();
      
      // Преобразование out в BLOB
      Connection conn = new OracleDriver().defaultConnection();
      BLOB vRes = BLOB.createTemporary(conn, false, BLOB.DURATION_SESSION);
      vRes.open(BLOB.MODE_READWRITE);
      OutputStream tmp = (OutputStream)vRes.setBinaryStream(1L);
      tmp.write(out.toByteArray());
      tmp.flush();
      tmp.close();
      vRes.close();
      
      return vRes;
   }
}
...
Рейтинг: 0 / 0
Java Archive
    #39650020
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PasticНе по джаве, а по яве.Первые книжки по джаве на русском языке писали/переводили курильщики и мотоциклисты. Сейчас во вменяемых текстах оригинальные наименования пишут оригинальной латиницей.
Есть ли при РАН отдел, занимающийся фонетической стандартизацией заимствований, я не в курсе и посему при произнесении вслух английских терминов, а также, когда лень переключать раскладку, коверкаю латиницу на свой вкус и цвет. Например, partition предпочитаю произносить как партиция.
А вот в некоторых бухгалтерских документах, в наименовании российских юрлиц и торговых марок, где допускается только кириллица, встречаю исключительно "джава" и "партишен".
...
Рейтинг: 0 / 0
Java Archive
    #39650025
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-PasticНе по джаве, а по яве.Первые книжки по джаве на русском языке писали/переводили курильщики и мотоциклисты. Сейчас во вменяемых текстах оригинальные наименования пишут оригинальной латиницей.
Есть ли при РАН отдел, занимающийся фонетической стандартизацией заимствований, я не в курсе и посему при произнесении вслух английских терминов, а также, когда лень переключать раскладку, коверкаю латиницу на свой вкус и цвет. Например, partition предпочитаю произносить как партиция.
А вот в некоторых бухгалтерских документах, в наименовании российских юрлиц и торговых марок, где допускается только кириллица, встречаю исключительно "джава" и "партишен".

Английское название языка программирования java произошло от сорта кофе, который родом с островов яванского моря, которое по-английски называется "Java Sea". Поэтому логично по-русски называть этот язык программирования явой. И курильщики с мотоциклистами тут не при чём.
...
Рейтинг: 0 / 0
Java Archive
    #39650032
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я иначе как "жабой" его и произносить стесняюсь
Да на большее он и не тянет -- самая большая наебка 20 века
...
Рейтинг: 0 / 0
Java Archive
    #39650119
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pasticлогично по-русскиВ русском за сотни лет столько понамешено, что о логичности заикаться не стоит. Вряд ли тебя будут воспринимать адекватно, если болельщику ПСЖ вместо Пари Сен-Жермен будешь говорить Пари ж Сен-Жермен.
...
Рейтинг: 0 / 0
Java Archive
    #39651158
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
create or replace and compile java source named "JZip" as
import java.io.*;
import java.sql.*;
import java.util.zip.*;
import oracle.sql.CLOB;
import oracle.sql.BLOB;
import oracle.jdbc.*;

public class JZip
{ 
   public BLOB AddToArchive(BLOB pArchive, String pFileName, CLOB pFile) throws Exception
   {  ByteArrayOutputStream out = new ByteArrayOutputStream((int)pArchive.length());
      out.write(pArchive.getBytes(), 0, (int)pArchive.length());

      // Добавление файла в архив
      ZipOutputStream zip = new ZipOutputStream(out);
      zip.putNextEntry(new ZipEntry(pFileName));
      zip.write(pFile.getBytes(), 0, (int)pFile.length());
      zip.closeEntry();
      zip.flush();
      zip.close();
      
      // Преобразование out в BLOB
      Connection conn = new OracleDriver().defaultConnection();
      BLOB vRes = BLOB.createTemporary(conn, false, BLOB.DURATION_SESSION);
      vRes.open(BLOB.MODE_READWRITE);
      OutputStream tmp = (OutputStream)vRes.setBinaryStream(1L);
      tmp.write(out.toByteArray());
      tmp.flush();
      tmp.close();
      vRes.close();
      
      return vRes;
   }
}



При выполнении этого кода происходит ошибка java.lang.IndexOutOfBoundsException на строке
Код: java
1.
      zip.write(pFile.getBytes(), 0, (int)pFile.length());



При передаче объекта CLOB длиной 5052 байта (dbms_lob.getlength(vFile)) эта ошибка выскакивает даже в таком варианте:
Код: java
1.
      zip.write(pFile.getBytes(), 0, 50);



Как правильно считать длину объекта CLOB?
...
Рейтинг: 0 / 0
Java Archive
    #39651165
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Java Archive
    #39651177
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev...постарался бы в Oracle загрузить
https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/IOUtils.html


А каким образом Вы бы это сделали?
...
Рейтинг: 0 / 0
Java Archive
    #39651189
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AFAIK https://docs.oracle.com/en/database/oracle/oracle-database/18/jjdev/loadjava-tool.html

Но сам я НЕ пользовался. Для Oracle Server на Java НЕ разрабатываю
...
Рейтинг: 0 / 0
Java Archive
    #39651250
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oracle.sql.Datum.getBytes() возвращает sql-данные без преобразования и в случае клоба можно предположить локатор.
...
Рейтинг: 0 / 0
Java Archive
    #39651271
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-oracle.sql.Datum

Когда я создал переменную этого типа, то код не скомпилировался из-за ошибки
oracle.sql.Datum is abstract; cannot be instantiated

А когда я пытался преобразовать переменную типа CLOB к Datum, то текст ошибки изменился на следующий:
inconvertible types
...
Рейтинг: 0 / 0
Java Archive
    #39651278
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрю в JavaDoc и в упор НЕ вижу документированного метода getBytes у интерфейса Clob.

Если вызывать черти какие методы, полученные не чтением документации, а методом научного тыка... то и результат будет соответствующий. IMHO

https://docs.oracle.com/javase/7/docs/api/java/sql/Clob.html
...
Рейтинг: 0 / 0
Java Archive
    #39651283
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А oracle'овый класс
http://download.oracle.com/otn_hosted_doc/jdeveloper/905/jdbc-javadoc/oracle/sql/CLOB.html
как раз использует getBytes из Datum
http://download.oracle.com/otn_hosted_doc/jdeveloper/905/jdbc-javadoc/oracle/sql/Datum.html#getBytes()

Create a new Java byte array containing a copy of the RDBMS data. No conversions of any kind are done.
Что-то, какие данные, одному Oracle ведомо.

IMHO
...
Рейтинг: 0 / 0
Java Archive
    #39651320
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alientСоздаем класс add

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import java.awt.*;
import java.applet.*;
import java.lang.*;
public class add {
public static void archiv(String zipFileName, String fileName) throws IOException {
       File zipFile = new File(zipFileName);
       File tmpFile = File.createTempFile("zip", "tmp");
       File newFile = new File(fileName);
       byte[] buffer = new byte[8192];
       int readed;
       ZipOutputStream zipOutputStream = new ZipOutputStream(
           new BufferedOutputStream(
               new FileOutputStream(tmpFile)));
       try {
           if (zipFile.exists()) {
               ZipInputStream zipInputStream = new ZipInputStream(
                   new BufferedInputStream(
                       new FileInputStream(zipFile)));
               try {
                   ZipEntry entry;
                   while ((entry = zipInputStream.getNextEntry()) != null){
                       if (entry.getName().equals(newFile.getName())) {
                           continue;
                       }
                       ZipEntry newEntry = new ZipEntry(entry);
                       zipOutputStream.putNextEntry(newEntry);
                       while ((readed = zipInputStream.read(buffer)) > 0) {
                           zipOutputStream.write(buffer, 0, readed);
                       }
                       zipOutputStream.closeEntry();
                   }
               }
               finally {
                   zipInputStream.close();
               }
           }
           InputStream fileInputStream = new BufferedInputStream(
               new FileInputStream(newFile));
           try {
               /*System.out.printf("Adding %s\n", fileName);*/
               ZipEntry newEntry = new ZipEntry(newFile.getName());
               newEntry.setSize(newFile.length());
               newEntry.setTime(newFile.lastModified());
               zipOutputStream.putNextEntry(newEntry);
               while ((readed = fileInputStream.read(buffer)) > 0) {
                   zipOutputStream.write(buffer, 0, readed);
               }
               zipOutputStream.closeEntry();
           }
           finally {
               fileInputStream.close();
           }
       }
       finally {
           zipOutputStream.close();
       }
       if (zipFile.exists()) {
           zipFile.delete();
       }
       tmpFile.renameTo(zipFile);
   }
}


Терь создаем процедуру

Код: plsql
1.
2.
3.
4.
PROCEDURE ADD1 (zipFileName  IN  VARCHAR2,
               fileName    IN  VARCHAR2) 
as language java 
name 'add.archiv(java.lang.String, java.lang.String)';


И теперь вызов на сервере

exec add1('c:\test\input\d09_03.zip','c:\test\input\d09_03.dbf'); делает нам архив ну разархиривоние примерно в таком же духе - ява опять таки рулит!

Попробовал. Получил сообщение об ошибке ORA-29532: Java call terminated by uncaught Java exception: java.lang.SecurityException: Unable to create temporary file.

Поискал в интернете. Нашёл следующее :

Connected to:
Personal Oracle9i Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production

SQL>
SQL> connect scott/tiger
Connected.
SQL> begin
2 dbms_java.grant_permission('SCOTT','java.io.FilePermission','C:\TE MP','read,write,execute,dele
te');
3 end;
4 /
begin
*
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception: java.lang.SecurityException: policy table update SYS:java.io.FilePermission,
C:\TEMP
ORA-06512: at "SYS.DBMS_JAVA", line 0
ORA-06512: at line 2

SQL> connect sys/change_on_install_at_sans as sysdba Connected.

SQL> call dbms_java.grant_policy_permission('SCOTT','SYS','java.io.FilePermission','*');

Call completed.

SQL> connect scott/tiger
Connected.
SQL> begin
2 dbms_java.grant_permission('SCOTT','java.io.FilePermission','C:\TEMP','read,write,execute,dele
te');
3 end;
4 /

PL/SQL procedure successfully completed.


Выполнил dbms_java.grant_policy_permission(<имя схемы>,'SYS','java.io.FilePermission','*');

Не помогло.
...
Рейтинг: 0 / 0
Java Archive
    #39651423
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взял на себя смелость отформатировать ваше сообщение ...PasticПолучил сообщение об ошибке
Код: plaintext
1.
2.
ORA-29532:
 Java call terminated by uncaught Java exception:
  java.lang.SecurityException: Unable to create temporary file.
...
Не помогло.Если выдавать произвольные права на произвольные объекты, конечно не поможет:
Код: plaintext
1.
 java -XshowSettings:properties -version 2>&1|find ".tmp"
    java.io.tmpdir = Здесь\Реальный\Путь\Временного\Каталога
Или запросите системное значение свойства java.io.tmpdir или установите его в своём коде, чтобы выдать права на нужный объект.

Ну и, насколько я понимаю, права будут выдаваться не напрямую объекту файловой системы, а связанному с ним объекту directory RDBMS.
...
Рейтинг: 0 / 0
47 сообщений из 47, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Java Archive
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]