如何在Oracle调度作业中使用变量?



下面的脚本在Oracle SQL developer中运行。它将向表中插入两行。但是,当我将此脚本放入Oracle SQL developer中的scheduler选项卡下的作业时,没有插入任何行。在创建作业时,我使用sys。Default_job_class,作业类型为PL/SQL块。有人能帮我修改一下这个脚本吗,这样它就可以在一个作业中运行了?谢谢你

define batchNo='123';
insert into TABLE_NAME (col1, col2, col3, col4) select col1, col2, col3, col4 from TABLE2 WHERE BATCH_NO = '&batchNo';
commit;

更改代码,使其成为PL/SQL块:

DECLARE
batchNo  VARCHAR2(3) := '123';
BEGIN
insert into TABLE_NAME (col1, col2, col3, col4)
select col1, col2, col3, col4
from TABLE2
WHERE BATCH_NO = batchNo;
commit;
END;

define&varname在SQL*Plus中使用,但不是合法的PL/SQL。

使用"&batchNo"是特定于SQL*Plus的。在PL/SQL中不能使用

PL/SQL需要这样的东西:

DECLARE
l_batchno number := 123;
BEGIN
insert into TABLE_NAME (col1, col2, col3, col4) 
select col1, col2, col3, col4 from TABLE2 WHERE BATCH_NO = l_batchno;
commit;
END;

如果你想用参数执行,你必须这样做:

sqlplus -s $USER/$PASSWD @ script.sql <YOUR_PARAMETER>

SQL脚本必须包含:

INSERT INTO TABLE_NAME (col1, col2, col3, col4) 
SELECT col1, col2, col3, col4 FROM TABLE2 WHERE BATCH_NO = '&1';
COMMIT;

如果你想使用多于1个参数…

sqlplus -s $USER/$PASSWD @ script.sql <PARAMETER_1> <PARAMETER_2> ... <PARAMETER_N>

必须输入script.sql

DECLARE
v_FIRST DATATYPE;
v_SECOND DATATYPE;
v_N DATATYPE;
BEGIN
v_FIRST := '&1';
v_SECOND := '&2';
v_N := '&N';
END;

最新更新