【问题标题】:Convert script to PL/SQL procedure for dbms_scheduler将脚本转换为 dbms_scheduler 的 PL/SQL 过程
【发布时间】:2015-12-04 16:11:36
【问题描述】:

我对 SQL 还很陌生。我正在尝试将我拥有的脚本转换为存储过程,以便我可以运行:

dbms_scheduler.create_job (job_type => 'STORED_PROCEDURE')

调度器。

这是我的 SQL:

insert into EBA_PROJ_STATUS_HEALTH (DATESTAMP, WEEK, PROJECT_HEALTH, PROJECT_NAME, PROJECT_ID)
select
TO_DATE (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "DateStamp",
TO_CHAR (SYSDATE, 'WW') "WeekStamp",
decode (PROJECT_STATUS, '26080667600194118828749753718250690144', 'Red', '26080667600198954532028212234949514848', 'Green', '2608066760019489567412685398756201486', 'Yellow', '32151851918961403472745066957057582129', 'Terminated') Health,
PROJECT,
ID
from
EBA_PROJ_STATUS

【问题讨论】:

  • 将您的插入语句移动到一个过程中(不要忘记提交;),然后配置 create_job 过程的所有相关参数
  • TO_DATE (SYSDATE) 完全没有意义——实际上这是完全错误的。 to_date() 期望 varcharsysdatedateTO_DATE (SYSDATE) 将首先将sysdate 隐式转换为varchar,以便再次将其转换回date永远不要在 date 上使用 to_date()

标签: oracle oracle-apex procedure dbms-scheduler


【解决方案1】:

创建过程为:

CREATE OR REPLACE
PROCEDURE p_ins_EBA_PROJ_STATUS_HEALTH
AS
BEGIN
  INSERT
  INTO EBA_PROJ_STATUS_HEALTH
    (
      DATESTAMP,
      WEEK,
      PROJECT_HEALTH,
      PROJECT_NAME,
      PROJECT_ID
    )
  SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "DateStamp",
    TO_CHAR (SYSDATE, 'WW') "WeekStamp",
    DECODE (PROJECT_STATUS, '26080667600194118828749753718250690144', 'Red', '26080667600198954532028212234949514848', 'Green', '2608066760019489567412685398756201486', 'Yellow', '32151851918961403472745066957057582129', 'Terminated') Health,
    PROJECT,
    ID
  FROM EBA_PROJ_STATUS;
END;
/

您可以在过程中添加参数以避免硬编码值。

创建作业并内联调度:

BEGIN
  DBMS_SCHEDULER.create_job (
    job_name        => 'insert into EBA_PROJ_STATUS_HEALTH',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN p_ins_EBA_PROJ_STATUS_HEALTH; END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'freq=hourly; byminute=0; bysecond=0;',
    enabled         => TRUE);
END;
/

顺便说一句,

Never use TO_DATE on a DATE,它会将其隐式转换为字符串,然后使用特定于语言环境的 NLS 格式返回日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2013-11-08
    相关资源
    最近更新 更多