Oracle DBMS_SCHEDULER创建程序失败,PLSQL_BLOCK中SQL代码无效
问题分析与修正方案
你的实现方式是可行的,DBMS_SCHEDULER支持通过PLSQL_BLOCK类型嵌入包含SQL的PL/SQL代码块,当前代码的语法错误主要有以下几点:
- 存储过程名称错误:正确的调用名称是
DBMS_SCHEDULER.CREATE_PROGRAM,原代码写成了DBMS_SCHEDULER_CREATE PROGRAM,混淆了命名规则。 - 参数分隔符错误:参数之间需要用逗号
,分隔,原代码用了分号;,这会导致语法解析失败。 - 字符串引号错误:PL/SQL中字符串常量必须用单引号
'包裹,原代码使用双引号",Oracle会将双引号内的内容识别为标识符(如表名、列名)而非字符串值。
修正后的代码如下:
BEGIN DBMS_SCHEDULER.CREATE_PROGRAM ( program_name => 'TEST', program_type => 'PLSQL_BLOCK', program_action => 'BEGIN UPDATE my_table SET status = ''processed'' WHERE process_date = SYSDATE - 1; UPDATE my_table2 SET status = ''notprocessed'' WHERE process_date >= SYSDATE; END;', enabled => TRUE ); END; /
说明:
- 在字符串内的单引号需要用两个单引号
''转义,这是PL/SQL中嵌入字符串的标准写法。 - 外层添加
BEGIN...END;包裹存储过程调用,这是在SQL*Plus或类似工具中执行PL/SQL块的必要格式。
内容的提问来源于stack exchange,提问作者Chris E
相关产品推荐
相关产品推荐

