【问题标题】:sql query to pl sql proceduresql查询到pl sql过程
【发布时间】:2025-12-29 20:30:06
【问题描述】:

这是我的要求。我想从一个表中获取记录并将其存储在另一个临时表中。我写为查询。但不知道如何通过声明变量等将其作为过程。

每日新客户数据将被插入到表中。我只想获取从过去 10 日到今天为止签署 attribute_value 为“TOY_GIFT”的客户数据。我想每 10 天运行一次。

CREATE 
OR 
INSERT INTO
   cst_cust_attributes_tmp (ORGANIZATION_ID, CUST_ID, ATTRIBUTE_ID, ATTRIBUTE_SEQ, ATTRIBUTE_VALUE, ACTIVE_FLAG, CREATE_DATE, CREATE_USER, UPDATE_DATE, UPDATE_USER) 
   SELECT
      ORGANIZATION_ID,
      CUST_ID,
      ATTRIBUTE_ID,
      ATTRIBUTE_SEQ,
      ATTRIBUTE_VALUE,
      ACTIVE_FLAG,
      CREATE_DATE,
      CREATE_USER,
      UPDATE_DATE,
      UPDATE_USER 
   FROM
      cst_cust_attributes 
   WHERE
      create_date between to_date(to_char(sysdate - 10, 'DD-MON-YYYY HH:MI:SS AM'), 'DD-MON-YYYY HH:MI:SS AM') and to_date(to_char(sysdate, 'DD-MON-YYYY HH:MI:SS AM'), 'DD-MON-YYYY HH:MI:SS AM') 
      and attribute_value = 'TOY_GIFT' ;

//

提前谢谢..

【问题讨论】:

  • “我写为查询。但不知道如何通过声明变量将其作为过程”您不告诉使用您想使用哪些变量。请edit 提出问题并提供minimal reproducible example 示例数据和您的预期输出,并充分解释问题。

标签: sql oracle stored-procedures plsql procedure


【解决方案1】:

您需要创建一个 proc 来插入记录,并设置一个 dbms 作业以每 10 天执行一次。

例如,程序:

create or replace procedure LOAD_CUSTOMERS is
BEGIN
INSERT INTO
   cst_cust_attributes_tmp (ORGANIZATION_ID, CUST_ID, ATTRIBUTE_ID, ATTRIBUTE_SEQ, ATTRIBUTE_VALUE, ACTIVE_FLAG, CREATE_DATE, CREATE_USER, UPDATE_DATE, UPDATE_USER) 
   SELECT
      ORGANIZATION_ID,
      CUST_ID,
      ATTRIBUTE_ID,
      ATTRIBUTE_SEQ,
      ATTRIBUTE_VALUE,
      ACTIVE_FLAG,
      CREATE_DATE,
      CREATE_USER,
      UPDATE_DATE,
      UPDATE_USER 
   FROM
      cst_cust_attributes 
   WHERE
      create_date between to_date(to_char(sysdate - 10, 'DD-MON-YYYY HH:MI:SS AM'), 'DD-MON-YYYY HH:MI:SS AM') and to_date(to_char(sysdate, 'DD-MON-YYYY HH:MI:SS AM'), 'DD-MON-YYYY HH:MI:SS AM') 
      and attribute_value = 'TOY_GIFT' ;
      COMMIT;
END;

DBMS 工作:

begin
  sys.dbms_scheduler.create_job(job_name            => 'LOAD_CUSTOMERS_JOB',
                                job_type            => 'STORED_PROCEDURE',
                                job_action          => 'LOAD_CUSTOMERS', -- YOUR PROC NAME
                                start_date          => to_date('05-12-2019 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                                repeat_interval     => 'Freq=Daily;Interval=10',
                                end_date            => to_date(null),
                                job_class           => 'DEFAULT_JOB_CLASS',
                                enabled             => true,
                                auto_drop           => false,
                                comments            => '');
end;

【讨论】:

  • 非常感谢
  • 没问题@HappyMan 你能把它标记为接受的答案吗?
  • 完成了兄弟@Ali Fidanli
  • 我是一个新人。我的公司使用 oracle 11g。我是 Pl/sql 的新手。我只知道基本的 sql。我不知道 oracle pl/sql 中的以下内容``` 1.创建过程 2.创建作业 3.api 调用 4.batch 运行 5.metalized 视图 6. DB 链接 7.configuring 来自数据库的邮件警报。 8.all pl/sql 概念你能建议我在哪里简单轻松地学习所有这些。请推荐一些最好的 youtube 频道、网站、最好的课程、电子书或任何平台
  • happy udemy 和 youtube 有很棒的课程。不幸的是,当我还是第一份工作时,我不得不自学。