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

Posted

技术标签:

【中文标题】如何在 pl\\sql oracle db 中运行具有给定参数的 exe 文件【英文标题】:how to run an exe file with given parameters in pl\sql oracle db如何在 pl\sql oracle db 中运行具有给定参数的 exe 文件 【发布时间】:2021-12-14 06:08:54 【问题描述】:

我正在将 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 执行操作系统文件或程序。正如 Littlefoot 在他的回答中所建议的,您必须使用间接方法。 是的,我想,谢谢。 【参考方案1】:

据我所知,如果您想从 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>

【讨论】:

感谢您的回复,它运作良好@Littlefoot 不客气,如果有帮助我很高兴。

以上是关于如何在 pl\sql oracle db 中运行具有给定参数的 exe 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用其他 pl/sql 块在 Oracle db 中输出信息?

为了对存储在 Oracle db 中的数据运行搜索查询,在 PL/SQL 中使用 REGEXP 是不是比在 Java 正则表达式中获取所有数据并过滤它更快?

PL/SQL/Oracle DB:过程:ORA-29013:SSL MAC 验证失败(数据库 19c)

PL/SQL 迭代所有模式并在所有模式上运行相同的查询

Oracle PL/SQL 中的字符编码问题

在 Oracle PL/SQL 视图中管理 DB 链接