- 浏览: 47240 次
- 性别:
- 来自: 河南
文章分类
最新评论
-
wjcom1127:
我也是改成了还是没效果!LZ乱说。
Tomcat6-The requested resource(/)is not available -
张振方:
<plug-in>< ...
Spring 和struts 整合的三种方式 -
zhanger:
改了之后,重启Tomcat还是一样的,没效果
Tomcat6-The requested resource(/)is not available
声明:本文转自 http://www.blogjava.net/cheneyfree/archive/2009/01/26/252582.html
【1】批量插入数据:
对于从表A的数据要迁移到表B中,一般可以建议用insert into select from来实现比较快。一般大数据量就用它来实现数据的迁移,迁移前将目的表的索引先去掉,导完数据之后再将该表的索引建起。SQL执行速度可以在Oracle客户端来查看sql语句的执行时间进度。
insert into susr_basic(usercode)
select t1.usercode from v3_sub_1 t1
where not exists (select t2.usercode from susr_basic t2 where t1.usercode = t2.usercode)
and substr(t1.usercode,1,2) <> '86'
【2】联合查询条件不相等的情况:
将v3_sub_1中86开头的号码以及用户表中已存在号码过滤掉再查询
select t1.usercode from v3_sub_1 t1 where not exists (select t2.usercode from susr_basic t2 where t1.usercode = t2.usercode )and substr(t1.usercode,1,2) <> ''86'' ';
删除和清理中间表的写法,对于表中有大量数据的时候:
begin
loop
delete from xsmp102.sms_subscription_query where query_time <(sysdate-1) and rownum < 10000;
exit when sql%rowcount = 0;
commit;
end loop;
exception when others then
rollback;
v_message := sqlcode||':'||sqlerrm;
insert into sms_log(id,object_name,message,record_time) values
('job','sms_clear:sms_subscription_query',v_message,sysdate);
commit;
end;
不建议用:
--每次生成完订购关系记录后将中间表v3_sub_2数据全部清空
delete from zxdbm_ismp.v3_sub_2;
commit;
因为在执行delete from一次执行完后会在日志表中写入很多回滚信息,负荷比较大。
【3】存储过程中的commit是否需要显示的写,看外部调用它的时候是否已经有commit了,如果有则不用写,如果没有则必须在存储过程中显示的写。
【4】LOG表中的时间字段名称不要用time直接命名,建议用createtime 类型不要用varchar,建议用date类型
【5】对于下面逻辑:
begin
--1 短信 2 彩信 从zxdbm_ismp.v_ssrv_product视图查询servicetype
--执行下面这句sql语句查询后,v_servicetype为null时,会转向异常区域
select servicetype into v_servicetype from zxdbm_ismp.v_ssrv_product where productid = v_productid;
exception when others then
--将cpid,productid和flag以及当前操作的视图 入日志表 以便跟踪是哪个入参没有查询到servicetype
v_message := sqlcode ||':'|| sqlerrm;
insert into v3_sub_2_log values('zxdbm_ismp.v_ssrv_product',v_message,sysdate,v_cpid,v_productid,v_flag);
commit;
v_retvalue :='not find servicetype with productid... ';
return;
end;
如果在exception中insert into 后面没有显示的写commit语句,执行完存储过程后,会等几秒钟,Oracle缓冲区满后才能在v3_sub_2_log中查询到值。而如果insert 语句是在exception外,begin内执行的话,也是一样,要根据Oracle的系统参数配置,同样,看缓冲区是否已满,否则是不会将数据真正插入到v3_sub_2_log表中的。
【6】
delete
update
select
insert
在什么情况下执行会进入异常区域
例: 当selcect查询不到值会进异常区域
当update更新不到值不会进异常
当delete删除不到值不会进异常
当insert的值不满足sql语句insert条件是会进入异常区域
CREATE OR REPLACE PROCEDURE MyTest
(
i varchar2,
o_retvalue out varchar2
)
AS
v_username varchar2(100);
begin
select username into v_username from zxdbm_ismp.ismp_oper_temp where spcode = i;
update zxdbm_ismp.ismp_oper_temp set username = 'cheng' where spcode = i;
delete from zxdbm_ismp.ismp_oper_temp where spcode = i;
insert into zxdbm_ismp.ismp_oper_temp values(100,1,'sp','01014849',0,88);
o_retvalue := 1;
commit;
exception when others then
rollback;
o_retvalue := 0;
end MyTest;
【7】两表联合查询:
select t1.usercode from v3_sub_1 t1
where not exists (select t2.usercode from susr_basic t2
where t1.usercode = t2.usercode ) --表示usercode键不相等的情况
在Oracle和SQLServer中这种情况不能用下面的sql语句来做:
select t1.usercode from v3_sub_1 t1,susr_basic t2 where t1.usercode <> t2.usercode
SQLServer中可以用:
select t1.usercode from v3_sub_1 t1,susr_basic t2 where t1.usercode not in t2.usercode
【8】truncate table loaddata和delete from loaddata
execute immediate "truncate table AAA" 动态sql
【9】PRAGMA AUTONOMOUS_TRANSACTION
当前的存储过程作为已有事务的子事务运行,子事务的commit,rollback操作不影响父事务的状态。
ex:
PROCEDURE write_log (
code IN INTEGER, text IN VARCHAR2)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO log VALUES (
code, text,
USER, SYSDATE
);
COMMIT:
END;
因为这个procedure的作用是写log,
无论操作成功与否(即无名块是否执行rollback),
log当然是都应该记录的,所以要把它写成自治事务,
让这个procedure的提交独立于调用它的无名块,在rollback时也不会影响到log的记录。
一定要用commit or rollback, 如果不用的结果就是:
可以编译,但是在执行的时候会提示:
ORA-06519: active autonomous transaction detected and rolled back
ORA-06512: at "SYS.LOGGING_INFO", line 10
ORA-06512: at "SYS.BOOK_INSERT", line 15
ORA-06512: at line 2
【10】
SQL> insert into test_char values ('abc', '123', ',fd');
SQL> commit;
没有commit之前,其他的session并不能访问到这条数据
在本次session结束时,数据库会自动commit。
commit 是提交事务的语句
commit之前其他用户读到的还是旧数据,可以用sql plus worksheet试验一下。
commit 之前,数据并没有真正插入到物理表。
commit之后,lgwr进程会将redo缓冲中的内容写入redo log里边,但是不一定会真的写到数据文件里边。
DBWR进程,在下述条件下会将缓冲中的数据写入数据文件:
1.当服务进程扫描一定数目的缓冲以后,找不到干净的可用的缓冲,它会通知DBWn进程写入dirty缓冲中的数据.
2.DBWn进程会在检查点之前,周期地将缓冲区中的数据写入到文件,而检查点正是redo进程恢复时使用的起点。
oracle中insert一条记录后,没有执行commit在同一个session可以查询到。
例:
1:先执行
insert into Table1(A1,A2) values(1, 2)
不执行commit
2:在同一个session可以查询到
select * from Table1
结果:刚insert进去的那条记录可以查询到
A1,A2
1,2
【11】SQL是用于访问ORACLE数据库的语言,PL/SQL扩展和加强了SQL的功能,它同时引入了更强的程序逻辑。 PL/SQL支持DML命令和SQL的事务控制语句。DDL在PL/SQL中不被支持,这就意味作在PL/SQL程序块中不能创建表或其他任何对象。较好的PL/SQL程序设计是在PL/SQL块中使用象DBMS_SQL这样的内建包或执行EXECUTE IMMEDIATE命令建立动态SQL来执行DDL命令,PL/SQL编译器保证对象引用以及用户的权限。
【12】
唯一索引
create unique index idxsrvusrtotalamt02usridx on ssrv_user_totalamount02(userindex,amounttype,amountindex,productindex)
非唯一索引
create index idxsrvusrtotalamt02cpidx on ssrv_user_totalamount02(userindex,cpindex)
【13】
将循环体中查询出来的N个productid累加到v_productIDList变量中
for i IN
(select productid from zxdbm_ismp.ssrv_product_pkg_map where productpkgindex = i_commonindex)
loop
if v_productIDList is null then
v_productIDList := i.productid;
else
v_productIDList := v_productIDList||' '||i.productid;
end if;
end loop;
【14】
--将v3_sub_2表中余下userindex,usercode字段值insert到v3_sub_4用户表,批量update
update v3_sub_4 v4 set
(v4.userindex,v4.usercode) =
(select zxdbm_200.sp_getmaxvalue_func('susr_basic',1),v2.usercode
from zxdbm_ismp.v3_sub_2 v2,zxdbm_ismp.susr_info s
where v2.customerindex = s.customerindex and v2.customerindex = v4.customerindex);
update v3_sub_4 v4 set
(v4.userindex,v4.usercode) =
(select zxdbm_200.sp_getmaxvalue_func('susr_basic',1),v2.usercode
from zxdbm_ismp.v3_sub_2 v2 where v2.customerindex = v4.customerindex);
2种方式都可以
【15】对于
--产品套餐关系解除
select productindex into v_productindex from wap_ismp_product where cpid = i_spid;
当查询出来的productindex值有多个时,此sql会抛出异常:ORA-01422: exact fetch returns more than requested number of rows
【16】关于ORACLE中外键的设计的好处,以及设计外键的时候,对于多表关联的删除操作需要注意的问题的总结。
对于SP信息,其中业务信息和产品信息都与SP信息存储外键约束:
--业务表
alter table WAP_ISMP_SERVICE
add constraint FK_SERVICE_REF_SCP_BASIC foreign key (CPINDEX)
references WAP_SCP_BASIC (CPINDEX);
/
--产品表
alter table WAP_ISMP_PRODUCT
add constraint FK_PRODUCT_REF_SERVICE foreign key (SERVICEINDEX)
references WAP_ISMP_SERVICE (SERVICEINDEX);
alter table WAP_ISMP_PRODUCT
add constraint FK_PRODUCT_REF_SERVICED foreign key (CPINDEX)
references WAP_SCP_BASIC (CPINDEX);
/
当有下面几个SQL语句时:
--sp
delete from wap_scp_basic where cpid = i_spid;
--sp下的产品
delete from wap_ismp_product where cpid = i_spid;
--sp下的产品下的业务
delete from wap_ismp_service where cpid = i_spid;
只要其中一个表下面挂的关联表中有数据,就必须先(删除)这个关联子表,然后再删除主表,否则ORACLE会提示:
ORA-02292: 违反完整约束条件 (WAP.FK_SERVICE_REF_SCP_BASIC) - 已找到子记录日志
备注:Update操作和Insert以及Select操作不受此限制!
【17】当distinct 碰到函数后不起作用
select distinct sys_guid(),12,'K', t.parent_cat_id,sysdate,sysdate from wap_category1 t
where t.cat_id in
((select cat_id from wap_ssrv_servicecatgroup_map1 where serviceindex = 1))
结果:
1 52E623097A30C3D6E040280ABA987A06 12 K 100 2008-7-26 12:27:37 2008-7-26 12:27:37
2 52E623097A31C3D6E040280ABA987A06 12 K 200 2008-7-26 12:27:37 2008-7-26 12:27:37
3 52E623097A32C3D6E040280ABA987A06 12 K 100 2008-7-26 12:27:37 2008-7-26 12:27:37
期望结果;
1 52E623097A30C3D6E040280ABA987A06 12 K 100 2008-7-26 12:27:37 2008-7-26 12:27:37
2 52E623097A31C3D6E040280ABA987A06 12 K 200 2008-7-26 12:27:37 2008-7-26 12:27:37
解决方案:
select sys_guid(), x.*
from (select distinct 12 c1,
'k' c2,
t.parent_cat_id,
sysdate c3,
sysdate c4
from wap_category1 t
where t.cat_id in ((select cat_id
from wap_ssrv_servicecatgroup_map1
where serviceindex = 1))) x;
【18】放开页面限制(SAG接入的SP可以同时申请SAG和3G两种业务能力的sql语句)
一家SP只要申请SAG或3G中的一种业务能力,就不能再申请余下的一种业务能力,其SQL如下:
select servicetype, subcapability, srvtypeshortname, status
from zxdbm_ismp.ssys_service_type
where servicetype < 101
and status = 1
and subcapability != 2
and servicetype not in (select servicetype
from zxdbm_ismp.v_ssrv_sp_service
where cpindex = 103005
and status != 4)
SAG接入的SP即可以申请SAG又可以申请3G业务能力,其SQL如下:
select ss.servicetype, ss.subcapability, ss.srvtypeshortname, ss.status
from zxdbm_ismp.ssys_service_type ss
where not exists (select vs.servicetype,vs.subcapability
from zxdbm_ismp.v_ssrv_sp_service vs
where vs.cpindex = 100443
and vs.status != 4 and ss.servicetype = vs.servicetype
and ss.subcapability = vs.subcapability
)
and ss.servicetype < 101
and ss.status = 1 and ss.subcapability != 2
发表评论
-
oracle数据导入导出
2009-02-06 17:32 1370ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现 ... -
SQL Server2000安装挂起处理
2009-01-21 10:02 2553SQL Server2000安装挂起处理 以前的某个程序安装 ... -
SQL2005 安装时 “性能监视器计数器要求(错误)” 解决方法
2009-01-20 11:01 1518SQL2005 安装时 “性能 ... -
Oracle 10g scott 解锁
2009-01-20 10:57 1499Oracle 10g scott 解锁 http:/ ... -
Oracle--在Windows系统下完全卸载Oracle(转载,修改)
2009-01-20 10:50 1220在Windows系统下完全卸载Oracle(转载,修改) ... -
Oracle--D在本机上已经存在,请指定一个不同的SID”的解决办法
2009-01-20 10:43 2024“指定的SID在本机上已经存在,请指定一个不同的SID”的解决 ...
相关推荐
Oracle SQL是数据库管理员和开发人员在Oracle数据库系统中进行数据查询和管理的重要工具。这篇笔记主要涵盖了Oracle SQL的...这两份“Oracle SQL笔记”文档应包含了上述各个方面的详细解释和实例,值得仔细阅读和学习。
### Oracle SQL 笔记知识点详解 #### 一、SQLPlus 命令及环境变量 Oracle_sid - **SQLPlus 命令位置**:在 Oracle 安装目录下的 `bin` 文件夹中,可以通过 SQLPlus 来执行 SQL 命令。 - **Oracle_sid 环境变量**:...
【Oracle SQL笔记详解】 Oracle SQL是用于访问和操作Oracle数据库的强大工具,涵盖了各种查询、更新和管理数据的方法。以下是对笔记中提及的一些关键知识点的详细解释: 1. **登录Oracle数据库**:通常以超级管理...
### Oracle SQL 笔记知识点详解 #### 一、表的创建与定义 在 Oracle SQL 中,`CREATE TABLE`语句用于创建新表。通过该语句可以定义表的结构,包括列名、数据类型以及列上的约束等。 ##### 示例: ```sql CREATE ...
根据提供的文件信息,我们可以归纳出一系列重要的Oracle SQL知识点,这些知识点涵盖了从基本的SQL概念到高级的数据库管理技术。下面是对这些知识点的详细说明: ### 1. SQL介绍 #### 结构化查询语言 (Structured ...
【标题】:“(转)最全的SQL(Oracle)笔记集录” 这篇资源是一个全面的SQL,特别是针对Oracle数据库的学习笔记集合。Oracle是世界上最广泛使用的数据库管理系统之一,它提供了丰富的功能来处理各种类型的数据和满足...
精通Oracle SQL【第2版】ORACLE SQL高级编程【第二版】学习笔记
sql fundament 读书笔记 oracle 原厂 培训 金领DBA
Oracle SQL是用于管理和操作Oracle数据库的关键工具,涵盖了数据查询、数据操纵、数据定义以及数据控制等多个方面。在本文中,我们将深入探讨Oracle SQL中的数据控制语句(DCL)、数据定义语句(DDL)以及一些基本的...
Oracle和SQL Server是两大主流的关系型数据库管理系统,广泛应用于企业级的数据存储和处理。这篇学习笔记将深入探讨这两个系统的概念、特性和应用。 一、Oracle数据库系统 Oracle数据库是由甲骨文公司开发的一款...
### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...
数据库SQL Oracle笔记全面解析 在IT领域,数据库是存储、管理与检索数据的核心工具,而Oracle作为世界上最流行的商业数据库管理系统之一,其强大的功能和广泛的应用使得掌握Oracle SQL变得至关重要。本笔记将涵盖...
其次,笔记可能会深入到Oracle的高级特性,比如PL/SQL编程,这是一种专为Oracle设计的过程化编程语言,用于创建存储过程、函数、触发器等。此外,可能还会涵盖数据库事务处理、并发控制和锁机制,这些都是保证数据...
Oracle 10g SQL 学习笔记涵盖了Oracle数据库的基础知识,包括版本信息、数据库系统特点、关系型数据库结构、SQL语言、操作环境以及常见的数据库操作。以下是对这些知识点的详细说明: 1. **Oracle 9i基础知识**: ...
Oracle SQL编程是数据库管理的重要组成部分,特别是在Oracle数据库系统中,SQL与PL/SQL结合使用,大大增强了数据库操作的灵活性和效率。以下是一些关键知识点的详细说明: 1. **PL/SQL**: PL/SQL(Procedural ...
笔记可能涉及索引的创建和管理、SQL调优(如使用EXPLAIN PLAN分析查询执行计划)、数据库统计信息的收集、存储优化以及使用Oracle的性能监控工具(如AWR和ASH报告)。 此外,Oracle的安全管理包括用户权限管理、...
oracle sql笔记。
在"Oracle培训笔记2"中,我们可以看到一系列的课程涵盖了XML基础和多行函数的应用,这些都是Oracle数据库管理和开发中的关键知识点。 XML(可扩展标记语言)在Oracle中的应用非常广泛,特别是在数据交换和存储非...