如何在 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
内置包。
像这样:
您将传递 tarih
和 id
作为过程的参数。
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>
我正在将 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
内置包。
像这样:
您将传递 tarih
和 id
作为过程的参数。
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>