oracle - 当 job_action 需要调用具有 CLOB 参数的过程时,如何创建作业
问题描述
我有一个在服务器端调用的过程,我需要使其异步。
所以我创建了另一个 proc,我将在其中创建 Oracle'Job,这将在其 job_action 中调用该 proc。过程是:
PROCEDURE upload_csv_file_data(a_what_to_do IN VARCHAR2,
a_logon_user IN VARCHAR2,
a_csv_data IN CLOB)
IS
v_job_action VARCHAR2(32676);
/*v_log_error VARCHAR2(32676);*/
v_job_name VARCHAR2(100);
BEGIN
v_job_action := 'process_csv_file_data(''' || a_what_to_do || ''',''' || a_logon_user || ''',' || a_csv_data || ');';
v_job_name := 'UPLOAD_CSV_FILE_DATA';
sys.dbms_scheduler.create_job(
job_name => v_job_name,
job_type => 'PLSQL_BLOCK',
job_action => 'begin ' || v_job_action || ' EXCEPTION WHEN OTHERS THEN NULL; end;',
start_date => SYSTIMESTAMP,
job_class => 'BATCH_CLASS',
comments => 'Start uplaoding CSV file data.',
auto_drop => TRUE,
enabled => TRUE);
END;
需要调用 IN JOB 的 Proc 是:
CREATE OR REPLACE PROCEDURE process_csv_file_data(a_what_to_do IN VARCHAR2,
a_logon_user IN VARCHAR2,
a_csv_data IN CLOB)
IS
.
/*STEPS*/
.
END;
但是由于此 PROC 的传递参数之一是 CLOB,因此每当我尝试调用在 JOB 中使用的 PROC 时,它都会引发错误“ORA-06502: PL/SQL: numeric or value error”。
由于 job_action 数据类型为 VARCHAR2(4000);因此,当在 Job 操作中调用 proc 时动态传递 CLOB 数据类型时,它会引发错误“ORA-06502: PL/SQL: numeric or value error”
请就此提出建议。(我们可以使用绑定变量传递参数吗?)
解决方案
CLOB 数据必须来自某个地方。与其将其作为参数传递给过程,不如将其存储在作业可以读取的表中。或者,您可以将原始源作为文件读取,理想情况下作为外部表或 BFILE。
推荐阅读
- javascript - 从 google api 请求 OAuth 令牌时找不到帐户
- sql - 如何从包含团队子团队的表格中获取所有子团队?
- r - R:想要将数据表中的列中的数据复制到特定的行中
- javascript - 使用 URL.createObject 播放(本地)音频文件
- android-studio - 没有必要将值 2> 值 1
- r - 比例来自两个不同数据帧的数字?
- html - 在省略号的情况下,红色星号不应消失
- python-3.x - Python Selenium:查找选择输入时唯一标识符变为空白的输入位置
- sql-server - 如何自定义用户的钻取功能以通过 excel 使用 SSAS 表格模型
- java - “主要”java.lang.NoSuchMethodError:'void com.google.common.base.Preconditions.checkArgument(boolean,java.lang.String,char,java.lang.Object)'