powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как запустить на исполнение команду операционной системы
7 сообщений из 7, страница 1 из 1
как запустить на исполнение команду операционной системы
    #32170766
lsv2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как из тригера (процедуры) запустить на исполнение команду операционной системы. (unix)
...
Рейтинг: 0 / 0
как запустить на исполнение команду операционной системы
    #32170817
Гы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
снести oracle, и использовать db2
...
Рейтинг: 0 / 0
как запустить на исполнение команду операционной системы
    #32170824
no name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то здесь это уже обсуждали. Из триггера вешай job, а в нем юзай яву.
...
Рейтинг: 0 / 0
как запустить на исполнение команду операционной системы
    #32170935
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Подскажите как из тригера (процедуры) запустить на исполнение команду
>операционной системы. (unix)

поиск по форуму по "extproc"
...
Рейтинг: 0 / 0
как запустить на исполнение команду операционной системы
    #32171002
Vladimir Demkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Известный способ с древних времен, когда еще джавы не было:
используется пакет dbms_pipe
на системе на, которой необходимо выполнить команду вешается процесс с открытой сессией. В этой сессии изначально создается pipe, который он и слушает.
Когда другому процессу Oracle необходимо выполнить какие-нибудь действия, он посылает в этот пайп некий сигнал (можно и саму команду), которую читает слушающий процесс и выполняет соответствующие действия в ОС.
...
Рейтинг: 0 / 0
как запустить на исполнение команду операционной системы
    #32171013
Гы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
умора!
...
Рейтинг: 0 / 0
как запустить на исполнение команду операционной системы
    #32171088
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java example:

Java class
---------
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class JCommand {

    public static int execute(String cmd) {
      try
      {
        Process process = Runtime.getRuntime().exec(cmd);
        int exitVal = process.waitFor();
        return (exitVal);
      }
      catch (Exception e)
      {
//System.out.println( "Exception: "  + e.toString());
        return  1 ;
      }

    }
}


PL/SQL function
---------------

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE
  FUNCTION OS_Command(
                      p_Cmd IN VARCHAR2
                     )
    RETURN NUMBER
    AS LANGUAGE JAVA
       NAME 'JCommand.execute(java.lang.String) return int';
/


Now either add Java class to Oracle CLASSPATH or use loadjava utility.
Usage example for my live code:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
                  IF Os_Command(
                                '/usr/bin/lp -d Paper_Payer ' || v_BATCH_FILE
                               ) =  0 
                    THEN
                       v_JOB_LOG_DETAIL_ID := Logger.Write_Log(
                                                               v_JOB_LOG_ID,
                                                               'S',
                                                               'Submitted batch file ' || v_BATCH_FILE ||
                                                                 ' to printer.'
                                                              );
                    ELSE
                       v_JOB_LOG_DETAIL_ID := Logger.Write_Log(
                                                               v_JOB_LOG_ID,
                                                               'E',
                                                               'Failed to submit batch file ' || v_BATCH_FILE ||
                                                                 ' to printer.'
                                                              );
                  END IF;


There is a catch though. Oracle process starts in so-called "clean" environment. As a result OS command you are trying to execute might not be in the PATH or some libraries it needs might not be in LD_LIBRARY_PATH. Then you need to use ENVS parameter in corresponding SID_DESC of LISTENER.ORA. For example:

Код: plaintext
1.
2.
3.
4.
5.
6.
    (SID_DESC =
      (SID_NAME = xxx)
      (ORACLE_HOME = /u01/home/oracle/product/ 8 . 1 . 7 )
      (GLOBAL_DBNAME = hmdbqa.hmonline.com)
      (ENVS = 'PATH=/usr/bin:/usr/local/bin:/u01/home/oracle/product/8.1.7',)
    )


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


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