oracle - 是否可以在 Oracle dbms_scheduler 中传递自定义类型的参数?
问题描述
我有 NUMBER 个变量的集合(关联数组或嵌套表)。我想启动一个调用存储过程的作业,该存储过程反过来接收这种非常自定义的类型并为每个元素做一些事情。现在我的工作需要一个我设置参数的程序。如何将自定义数据类型(关联数组或数字表)的参数设置到调度程序中?或者有什么替代方法?提前致谢
解决方案
自定义类型可以使用ANYDATA
. 但是这个过程很复杂,因此使用硬编码的 PL/SQL 块创建新作业可能比重新使用带有参数的程序更容易。
--Create a nested table of NUMBERs.
create or replace type number_nt is table of number;
--Create a procedure that accepts a nested table of numbers.
create or replace procedure test_procedure(p_numbers in number_nt) is
begin
if p_numbers is not null then
for i in 1 .. p_numbers.count loop
dbms_output.put_line(p_numbers(i));
end loop;
end if;
end;
/
--Create a PROGRAM to run the stored procedure.
begin
dbms_scheduler.create_program
(
program_name => 'TEST_PROGRAM',
program_type => 'STORED_PROCEDURE',
program_action => 'TEST_PROCEDURE',
number_of_arguments => 1
);
end;
/
--Define the argument that will be passed into the stored procedure and enable the program.
begin
dbms_scheduler.define_anydata_argument
(
program_name => 'TEST_PROGRAM',
argument_position => 1,
argument_type => 'SYS.ANYDATA',
default_value => null
);
dbms_scheduler.enable('TEST_PROGRAM');
end;
/
--Create the nested table of numbers, convert it into an ANYDATA, create a job,
--pass the ANYDATA to the job, and then enable the job.
declare
v_numbers number_nt := number_nt(1,2,3);
v_anydata anydata;
begin
v_anydata := anydata.convertCollection(v_numbers);
dbms_scheduler.create_job
(
job_name => 'TEST_JOB',
program_name => 'TEST_PROGRAM',
enabled => false
);
dbms_scheduler.set_job_anydata_value
(
job_name => 'TEST_JOB',
argument_position => 1,
argument_value => v_anydata
);
dbms_scheduler.enable('TEST_JOB');
end;
/
--Check the results.
--STATUS = "SUCCEEDED", OUTPUT = "1 2 3"
select status, output
from dba_scheduler_job_run_details where job_name = 'TEST_JOB';
推荐阅读
- bash - 如何从 csv 文件中获取列的最后一个值。注意 - 如果文件只有标题,它应该将值设为 0,其余场景正在工作
- python - TensorFlow 只加载少量数据集
- javascript - 我如何制作一个不和谐机器人,当我在 Javascript 中键入某个短语时,它只会给我一个角色?
- excel - 在 Microsoft Excel 中将单行 3 个数值分成 3 列并获得平均值
- java - 带有注释类的 Java 反射不起作用
- mysql - 如何从具有不同列名的两个不同表中求和
- javascript - 如何维护 html 容器元素的数量并发送到 Servlet?
- python - 为什么我的 Python 导入不能在 VSCode 中工作?
- android - 如何使用@bubblewrap 构建 TWA?
- html - 在 css 中处理 z-index