Oracle для профессионалов



              

Выполнение команды ОС - часть 2


Первый вызов dbms_java.grant_permission позволяет запускать одну конкретную программу. При желании можно рискнуть и указать вместо имени программы символ *. Это позволит выполнять любые программы. Я не думаю, однако, что это разумно; явно перечисляйте полные имена программ, в надежности которых вы уверены. Вторая привилегия позволяет генерировать результаты во время выполнения. Здесь придется использовать метасимвол *, поскольку я не знаю точно, куда именно будут выдаваться результаты (в стандартный выходной поток, stdout, например, или куда-нибудь еще).

Теперь необходимо создать уровень связывания:

tkyte@TKYTE816> create or replace 2 function RUN_CMD(p_cmd in varchar2) return number 3 as 4 language java 5 name 'Util.RunThis(java.lang.String[]) return integer'; 6 /

Function created.

tkyte@TKYTE816> create or replace procedure rc( 2 as 3 x number; 4 begin 5 x := run_cmd(p_cmd); 6 if (x <> 0) 7 then 8 raise program_error; 9 end if; 10 end; 11 /

Procedure created.

Здесь я создал еще один уровень абстракции выше функции связывания, чтобы можно было выполнять программу как процедуру. Давайте посмотрим, как это работает:

tkyte@TKYTE816> set serveroutput on size 1000000 tkyte@TKYTE816> exec dbms_java.set_output(1000000)

PL/SQL procedure successfully completed.

tkyte@TKYTE816> exec rc('C:\WINNT\system32\cmd.exe /c dir') Volume in drive C has no label. Volume Serial Number is F455-B3C3 Directory of C:\oracle\DATABASE 05/07/2001 10:13a <DIR> . 05/07/2001 10:13a <DIR> .. 11/04/2000 06:28p <DIR> ARCHIVE 11/04/2000 06:37p 47 inittkyte816.ora 11/04/2000 06:28p 31,744 ORADBA.EXE 05/07/2001 09:07p 1,581 oradim.log 05/10/2001 07:47p 2,560 pwdtkyte816.ora 05/06/2001 08:43p 3,584 pwdtkyte816.ora.hold 01/26/2001 11:31a 3,584 pwdtkyte816.xxx 04/19/2001 09:34a 21,309 sqlnet.log 05/07/2001 10:13a 2,424 test.sql 01/30/2001 02:10p 348,444 xml.tar 9 File(s) 415,277 bytes 3 Dir(s) 13,600,501,760 bytes free

PL/SQL procedure successfully completed.

Мы получили список файлов каталога ОС.




Содержание  Назад  Вперед