--1)Primary table
create table T_FRANK
(
T_NO NUMBER not null,
T_NAME NUMBER
)
tablespace STAGING_TEST2_DATA
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 1M
minextents 1
maxextents unlimited
);
-- 2)add PK for table T_FRANK
alter table T_FRANK
add constraint PK_T_FRANK primary key (T_NO)
using index
tablespace STAGING_TEST2_DATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- update field's type
alter table T_FRANK modify T_NAME VARCHAR2(30);
--3)Foreign table
create table T_FRANK_TEST
(
F_ID NUMBER not null,
T_NO NUMBER not null,
IS_MANDATORY CHAR(1) default '1',
QTY NUMBER default '0',
PRICE NUMBER(16,4),
LAUNCH_DATE DATE,
MODIFIER VARCHAR2(50)
)
tablespace STAGING_TEST2_DATA
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 1M
minextents 1
maxextents unlimited
);
-- 4)add PK for table T_FRANK_TEST
alter table T_FRANK_TEST
add constraint PK_T_FRANK_TEST primary key (F_ID, T_NO)
using index
tablespace STAGING_TEST2_DATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
--5)add FK for T_FRANK_TEST
alter table T_FRANK_TEST
add constraint FK_T_FRANK_TEST_T_FRANK foreign key (T_NO)
references T_FRANK (T_NO) on delete cascade;
--6)Create/Recreate indexes
create index T_FRANK_TEST_F_ID on T_FRANK_TEST (F_ID)
tablespace STAGING_TEST2_DATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
--7) insert data to T_FRANK
insert into T_FRANK values(NVL((select max(T_NO) from T_FRANK),0)+1,'Frank1');
insert into T_FRANK values(NVL((select max(T_NO) from T_FRANK),0)+1,'Frank2');
commit;
--8) insert data to T_FRANK_TEST
insert into T_FRANK_TEST values(NVL((select max(F_ID) from T_FRANK_TEST),0)+1,1,'1',1000,66.98,sysdate,'FrankWang');
insert into T_FRANK_TEST values(NVL((select max(F_ID) from T_FRANK_TEST),0)+1,2,'1',1000,66.98,sysdate,'FrankWang');
commit;
--9) update data
UPDATE T_FRANK_TEST t SET t.MODIFIER='FrankWang2' where t.f_id=2;
commit;
--10) delete T_FRANK(cascade delete T_FRANK_TEST)
delete from T_Frank f where f.t_no=1;
commit;
--11) delete the data and the table
--因为需要,Oracle有没有类似My SQL的drop table if exists这类的支持,只好自己写一个Declare了
declare
p_table varchar2(30):='T_FRANK_TEST';
v_count number;
begin
select count(1) into v_count from user_objects where object_name = upper('T_FRANK_TEST');
if v_count > 0 then
execute immediate 'drop table ' || p_table ||' cascade constraints';
end if;
end;
/
--12) usage for CURSOR , LOOP and WHILE in DECLARE
下面是实际工作中遇到的问题:
For this sap invoice error, there are two work need to do: please follow below order to execute the statement(1 -> 2), thanks!
1> Data patch:
Delete the dirty data from the table INVOICE_ARTICLE_SIZE, in order to delete it quickly(the dirty data is too large(about53473089)), below was my prepared statement:
According to preliminary estimates, below statement need about 13 hours in my local env. May be it need few time in Production.
DECLARE
--define batch delete number of invoices no
topnum constant int:=5;
----53473089.=5000*maxrecords=5000*10694, maxnum=10694
maxnum constant int:=2;
i int :=1;
new_invoice_no invoice_article_size.invoice_no%TYPE;
r_row invoice_article_size%rowtype;
--get top 500 record and stored to cursor
cursor my_cursor is
select * from invoice_article_size where invoice_no not in (select invoice_no from invoice) and rownum <= topnum;
TYPE t_invoice_no IS TABLE OF varchar2(20) INDEX BY BINARY_INTEGER;
j int :=1;
t_new_invoice_no t_invoice_no;
BEGIN
WHILE i<=maxnum LOOP
open my_cursor;
loop
fetch my_cursor into r_row;
-- not found, exit from cursor
exit when my_cursor%notfound;
--get invoce_no
t_new_invoice_no(j) := r_row.invoice_no;
dbms_output.put_line(t_new_invoice_no(j));
--delete it one by one and commit
delete from invoice_article_size where invoice_no = t_new_invoice_no(j);
commit;
end loop;
close my_cursor;
dbms_output.put_line(i);
--execute another loop
i := i+1;
END LOOP;
END;
2> Hotfix:
add cascade delete for INVOICE_ARTICLE_SIZE, below is the SQL:(it also need long time to execute, it depends on number of the record in the size table.)
alter table INVOICE_ARTICLE_SIZE
add constraint FK_INOVICE_ARTICLE_SIZE foreign key (INVOICE_NO,ARTICLE_NO,ERP_ORDER_ID)
references INVOICE_ARTICLE (INVOICE_NO,ARTICLE_NO,ERP_ORDER_ID) on delete cascade;
BTW, may be this data patch can’t finish today,
But our system will continue to generate dirty data before you do Hotfix,
Hence I suggest, you’d better execute below sql to check whether there are dirty data exist:
select count(1) from invoice_article_size ins where (ins.invoice_no not in(select invoice_no from invoice));
If above select result>0, it means there are dirty data exist, you can use below delete statement to delete it directly.
delete from INVOICE_ARTICLE_SIZE i where (i.invoice_no not in(select invoice_no from invoice));
commit;
--13)待续。。。
分享到:
相关推荐
以下是一些常用的 SQL 语句,用于监控 Oracle 数据库的性能: 1. **监控事例的等待事件**:通过 `v$session_wait` 视图,我们可以查看当前会话正在等待的事件类型、等待次数和总等待时间,从而分析系统中的性能瓶颈...
通过"SQL21天自学通",你将逐步掌握这些概念和操作,而"Oracle常用函数集锦"将为使用Oracle数据库提供便利,帮助你更高效地处理Oracle中的数据。学习过程中,理论结合实践,多做练习,理解每个函数的实际应用场景,...
工作中常用的SQL + 超复杂SQL 交叉连接查询corss.txt 公交线路问题.txt 。。。。 充储过程--sql0.sql 分割字符串.txt 分布式查询.txt 分组排列进行更新.txt 别名.txt 动态SQL语句.txt 动态语句.txt 区分大小写.txt ...
根据给定的文件信息,以下是对Oracle SQL语句集锦中的关键知识点的详细解析: ### Oracle SQL基础操作 #### 数据定义语言(DDL) - **创建表(Create Table)**: `CREATE TABLE`语句用于在数据库中创建一个新的表...
Oracle DB是全球广泛使用的大型关系型数据库管理系统,其稳定性和高效性在业界有着极高的声誉。然而,随着数据库系统的复杂度增加,DBA(数据库管理员)可能会遇到各种问题,需要具备一定的解决和诊断技巧。本手册...
Oracle电子书资料集锦是一个包含了丰富Oracle学习资源的压缩文件,主要聚焦于Oracle数据库系统的学习与进阶。这个集合可能适合数据库管理员(DBA)、软件开发者以及对Oracle技术感兴趣的学习者。下面,我们将深入...
### Oracle技巧集锦知识点详解 #### 一、Oracle安装与配置 **1. Oracle安装后的初始口令** - **Internal**: `internal/oracle` - **SYS**: `sys/change_on_install` - **SYSTEM**: `system/manager` - **SCOTT**:...
Oracle 面试题集锦总结 以下是对 Oracle 面试题集锦的详细解释和知识点总结: 1. 冷备份和热备份的不同点: 冷备份是在数据库关闭后进行备份,适用于所有模式的数据库。热备份是在数据库仍旧处于工作状态时进行...
5. SVRMGR是Oracle早期版本中的服务器管理工具,但在9i及更高版本中已被SQL*Plus替代。要登录到归档日志模式,可以使用SQL*Plus命令`sqlplus /nolog`然后执行`ALTER SYSTEM SET LOG_ARCHIVE_MODE=ARCHIVELOG;` 6. ...
Oracle数据库是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。在面试中,Oracle相关的技术问题经常被问及,以下是一些关键知识点的详细解释: 1. Oracle与SQL Server的区别: - 平台:...
"Oracle企业面试题集锦.pdf" Oracle 企业面试题集锦旨在为应试者提供一个系统的 Oracle 面试题集锦,涵盖了 Oracle 的各种知识点,从宏观到微观,全面介绍了 Oracle 的特点、优点和使用方法。 一、Oracle 和 SQL ...
这份"Oracle经验技巧集锦"文档无疑是对于那些在Oracle数据库管理、开发或维护工作中寻求提高效率和解决问题的人们的一份宝贵资源。以下将对一些可能包含在文档中的关键知识点进行详述: 1. **SQL优化**:SQL查询是...
以上就是从提供的信息中总结出的Oracle企业面试题集锦中的核心知识点,涵盖了Oracle与SQL Server的区别、Oracle特性、数据库管理、性能优化等多个方面。这些知识点对于深入理解和掌握Oracle数据库的使用和管理具有...
### ORACLE DB数据库常见问题解决及诊断技巧集锦 #### 关于Oracle数据库问题诊断信息获取 在处理Oracle数据库的问题时,正确地收集相关信息至关重要。以下是一些关键步骤: 1. **确认MAX_DUMP_FILE_SIZE参数设置*...
本篇文章将深入探讨“Oracle常见函数集锦”,主要关注在SQL查询中常用的Oracle函数,这些函数对于数据分析师、数据库管理员以及开发人员来说至关重要。 1. **字符串函数** - `CONCAT()`:用于连接两个或多个字符串...
Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,它由甲骨文公司(Oracle Corporation)开发和提供。...不断学习和实践是掌握Oracle的关键,希望这份资料集锦能成为你旅程中的宝贵资源。
以下是一些在Oracle开发中常用的SQL语句及其详细解释: 1. **数据查询(SELECT语句)**: - `SELECT column1, column2 FROM table_name;`:基本的查询语句,获取指定列的数据。 - `WHERE condition;`:定义查询...
Oracle是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。面试题集锦主要涵盖以下几个核心知识点: 1. **Oracle与SQL Server的区别**: - 平台差异:Oracle可在多种操作系统上运行,而SQL...