如何在 pl\sql oracle db 中 运行 具有给定参数的 exe 文件

how to run an exe file with given parameters in pl\sql oracle db

我正在将 oracle 表单代码转换为 oracle 存储过程,所以我需要你的帮助。 谁能告诉我如何在 plsql 代码中 运行 带有参数的 exe 文件?我已经尝试了很多方法来做到这一点。你可以在下面看到它的示例代码。

这是我的代码

DECLARE
  v_onay NUMBER;
  CURSOR c1 IS
    SELECT id
      FROM t1
     WHERE tarih = :main.tarih
       AND creditid IN
           (SELECT kredid FROM t2 WHERE tarih = :main.tarih)
     ORDER BY id;
  AppID PLS_INTEGER;
BEGIN
  v_onay := sor('GİRİLEN TARİH İÇİN GEÇ YAPILAN ÖDEMELERİ TEKRAR ÇALIŞTIRMAK İSTİYOR MUSUNUZ? ');
  IF v_onay = 1 THEN
    entegre.Krdtfrs9_Doldur(1, :main.tarih);  
    mess('Kayıtlar güncellendi. OUTPUT verileri hazırlanacak', 0);
  
    FOR r1 in c1 LOOP
      COMMIT;
    
      AppID := DDE.App_Begin('C:\Muhasebe\tfrs\Krd\ID\TFRS9KRD_ID.exe ' ||
                             TO_CHAR(:main.tarih, 'DD.MM.YYYY') || ' ' ||r1.id,
                             DDE.App_Mode_Maximized);    
    END LOOP;  
  END IF;
  mess('Güncelleme tamamlandı', 0);
END;

非常感谢。

据我所知,如果您想从 PL/SQL 存储过程 运行 一个操作系统可执行文件,您可以 安排 它使用 DBMS_SCHEDULER 内置包。

像这样:

您将传递 tarihid 作为过程的参数。

SQL> CREATE OR REPLACE PROCEDURE p_exe (par_tarih DATE, par_id NUMBER)
  2  AS
  3     l_name   VARCHAR (20) := 'GUNES';
  4     l_tarih  VARCHAR2 (10) := TO_CHAR (par_tarih, 'dd.mm.yyyy');
  5  BEGIN
  6     -- drop job if it already exists
  7     BEGIN
  8        DBMS_SCHEDULER.drop_job (l_name);
  9     EXCEPTION
 10        WHEN OTHERS
 11        THEN
 12           NULL;
 13     END;
 14
 15     -- create a new job
 16     DBMS_SCHEDULER.create_job (
 17        job_name             => l_name,
 18        job_type             => 'EXECUTABLE',
 19        job_action           => 'C:\Muhasebe\tfrs\Krd\ID\TFRS9KRD_ID.exe',
 20        number_of_arguments  => 2,
 21        enabled              => FALSE);
 22
 23     -- set arguments
 24     DBMS_SCHEDULER.set_job_argument_value (job_name           => l_name,
 25                                            argument_position  => 1,
 26                                            argument_value     => par_tarih);
 27     DBMS_SCHEDULER.set_job_argument_value (job_name           => l_name,
 28                                            argument_position  => 2,
 29                                            argument_value     => par_id);
 30
 31     -- enable job
 32     DBMS_SCHEDULER.enable (l_name);
 33  END;
 34  /

Procedure created.

SQL>