PLS-00103:在 DBMS_SCHEDULER 中遇到符号
Posted
技术标签:
【中文标题】PLS-00103:在 DBMS_SCHEDULER 中遇到符号【英文标题】:PLS-00103: Encountered the symbol in DBMS_SCHEDULER 【发布时间】:2022-01-23 22:28:36 【问题描述】:在作业中调用包会给出错误报告 -
ORA-06550: line 8, column 5:
PLS-00103: Encountered the symbol "
);
end; : AUXSQLDBIND4: = SqlDevBind1Z_1; : AUXSQLDBIND3: = SqlDevBind1Z_2; : AUXSQLDBIND2: = SqlDevBind1Z_3; : AUXSQLDBIND1: = SqlDevBind "
使用传递的变量 work_date 帮助调用数据包,以进行每月每一天的特定计算。
提前感谢您的帮助!
DBMS_SCHEDULER.create_job (
job_name => 'J_ACCOUNT_TURNOVER_F',
job_type => 'PLSQL_BLOCK',
start_date => SYSTIMESTAMP, enabled => TRUE,
job_action =>
'declare
start_date number;
end_date number;
work_date date;
begin
start_date := to_number(to_char(to_date('2018-01-01', 'yyyy-MM-dd'), 'j'));
end_date := to_number(to_char(to_date('2018-01-31', 'yyyy-MM-dd'), 'j'));
for cur_r in start_date..end_date loop
work_date := to_char(to_date(cur_r, 'j'), 'yyyyMMdd');
dma.fill_account_turnover_f.fill(work_date);
end loop;
end;'
);
end;
【问题讨论】:
用于 dbms_scheduler 的 SQL Developer 的 GUI 将允许您单击并输入此内容,最后是否会为您提供您正在寻找的整个 PL/SQL 块 【参考方案1】:如果您创建一个存储过程并调用它,而不是将该匿名 PL/SQL 块嵌入到DBMS_SCHEDULER.CREATE_JOB
调用中,那不是更简单吗?现在你必须转义单引号,即每次使用两个连续的单引号。像这样的:
begin
DBMS_SCHEDULER.create_job (
job_name => 'J_ACCOUNT_TURNOVER_F',
job_type => 'PLSQL_BLOCK',
start_date => SYSTIMESTAMP, enabled => TRUE,
job_action =>
'declare
start_date number;
end_date number;
work_date date;
begin
start_date := to_number(to_char(to_date(''2018-01-01'', ''yyyy-MM-dd''), ''j''));
end_date := to_number(to_char(to_date(''2018-01-31'', ''yyyy-MM-dd''), ''j''));
for cur_r in start_date..end_date loop
work_date := to_char(to_date(cur_r, ''j''), ''yyyyMMdd'');
dma.fill_account_turnover_f.fill(work_date);
end loop;
end;'
);
end;
/
【讨论】:
在不调用过程的情况下解决问题很有趣。谢谢您的帮助。你解决了我的问题。 :) 不客气。【参考方案2】:也许您对存储过程过敏 :) 您可以这样做,而不必逃避每个单独的报价。它被称为“Q Quote 语法”。
DBMS_SCHEDULER.create_job (
job_name => 'J_ACCOUNT_TURNOVER_F',
job_type => 'PLSQL_BLOCK',
start_date => SYSTIMESTAMP, enabled => TRUE,
job_action =>
q'!declare
start_date number;
end_date number;
work_date date;
begin
start_date := to_number(to_char(to_date('2018-01-01', 'yyyy-MM-dd'), 'j'));
end_date := to_number(to_char(to_date('2018-01-31', 'yyyy-MM-dd'), 'j'));
for cur_r in start_date..end_date loop
work_date := to_char(to_date(cur_r, 'j'), 'yyyyMMdd');
dma.fill_account_turnover_f.fill(work_date);
end loop;
end;'
);
end;!'
this 问题中的更多示例
【讨论】:
以上是关于PLS-00103:在 DBMS_SCHEDULER 中遇到符号的主要内容,如果未能解决你的问题,请参考以下文章