Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 删除过程中超过90天的数据_Sql_Oracle_Plsql_Oracle Sqldeveloper_Plsqldeveloper - Fatal编程技术网

Sql 删除过程中超过90天的数据

Sql 删除过程中超过90天的数据,sql,oracle,plsql,oracle-sqldeveloper,plsqldeveloper,Sql,Oracle,Plsql,Oracle Sqldeveloper,Plsqldeveloper,您是否可以建议,需要制定清理超过90天的数据的程序 我们需要创建临时表,该表将包含90天以上的记录,并且状态从J_DOC表发送 create table TEMP_ID_STAT_TIME_FRM_JOB_DOC as select JOB_ID, last_update_time_utc, status from J_DOC where LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent'; total reco

您是否可以建议,需要制定清理超过90天的数据的程序

我们需要创建临时表,该表将包含90天以上的记录,并且状态从J_DOC表发送

create table TEMP_ID_STAT_TIME_FRM_JOB_DOC as select JOB_ID, last_update_time_utc, status from J_DOC where 
LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent'; 

total records are: 4659140
select count(*) from TEMP_ID_STAT_TIME_FRM_JOB_DOC;
4659140

so we have created index on JOB_ID column to perform deletion operations faster any suggestion for faster performance:-

CREATE INDEX JOB_ID_INDEX 
ON TEMP_ID_STAT_TIME_FRM_JOB_DOC(JOB_ID);


CREATE INDEX JOB_ID_INDEX_JOB_DOC
ON J_DOC(JOB_ID);

CREATE INDEX JOB_ID_INDEX_HUB_SIG
ON HUB_SIG(JOB_ID);

we need to first delete from hub_sig table for records older than 90 days and STATUS SENT 

 delete from HUB_SIG where JOB_id IN ( SELECT JOB_ID
  FROM TEMP_ID_STAT_TIME_FRM_JOB_DOC);
  
after that we need to delete from main table J_DOC table

delete from J_DOC
 where JOB_id IN ( SELECT JOB_ID
  FROM TEMP_ID_STAT_TIME_FRM_JOB_DOC);
创建表TEMP\u ID\u STAT\u TIME\u FRM\u JOB\u DOC作为选择JOB\u ID,last\u update\u TIME\u utc,来自J\u DOC的状态,其中

上次更新时间UTC您根本不需要临时表

对于另一个表
HUB_SIG
使用
delete
语句,该语句使用delete谓词直接从主表
J_DOC
获取
job_id

delete from HUB_SIG where JOB_ID in 
(select JOB_ID from J_DOC
 where LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent')
J_DOC
中删除更简单,使用
WHERE
子句中删除行的标准

delete from J_DOC  
where LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent' 
从J_文档中删除

在上次更新时间UTC的地方,您根本不需要临时表

对于另一个表
HUB_SIG
使用
delete
语句,该语句使用delete谓词直接从主表
J_DOC
获取
job_id

delete from HUB_SIG where JOB_ID in 
(select JOB_ID from J_DOC
 where LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent')
J_DOC
中删除更简单,使用
WHERE
子句中删除行的标准

delete from J_DOC  
where LAST_UPDATE_TIME_UTC <= TRUNC(SYSDATE) - 90 and status='Sent' 
从J_文档中删除

上次更新时间UTC时,您说“更快”,但不描述任何性能问题。您是否对delete语句运行了解释计划?每个delete语句需要多长时间,您的目标是什么。你能分享一下解释计划吗?顺便说一句,对于你展示的用法-如果这是一个循环操作,你应该为你的“临时”表使用一个全局临时表(GTT)。没有必要反复删除和重新创建分区。@BarbarosÖzhan-请不要建议人们使用分区,除非提醒他们这是企业版上的一项额外收费。我们不想误导人们违反他们的Oracle许可证。(在Oracle 18c XE中免费提供,但在生产中很少使用该平台。)您说的是“更快”,但没有描述任何性能问题。您是否对delete语句运行了解释计划?每个delete语句需要多长时间,您的目标是什么。你能分享一下解释计划吗?顺便说一句,对于你展示的用法-如果这是一个循环操作,你应该为你的“临时”表使用一个全局临时表(GTT)。没有必要反复删除和重新创建分区。@BarbarosÖzhan-请不要建议人们使用分区,除非提醒他们这是企业版上的一项额外收费。我们不想误导人们违反他们的Oracle许可证。(Oracle 18c XE中免费提供了该平台,但在生产中很少使用该平台。)