数据库常用语句和函数

----update update()函数主要注意的是后面的where限制条件
--例子:
update tab_a a set a.v1 = (select b.v1 from tab_b b where a.key1=b.key1 and ...),...
where exists (select 'x'  from tab_b b where a.key1=b.key1 and ...);

update tab_a a  set (a.v1,a.v2) = (select b.v1,b.v2 from tab_b where a.key1=b.key1 and ...)
where exists (select 'x'  from tab_b b where a.key1=b.key1 and ...);

----merge into ;
merge into a table_a ----要更新或插入的目标数据
using (select ... from ... where ...) table_b  ---更新或插入的源数据
on (table_a.key1 = table_b.key1 and table_a.key2 = table_b.key2 ....)
----判断更新或插入的条件,只是两表之间的关联,如果b表内部有限制,直接在源数据上修改
when matched then     ---当on 里面的条件成立有结果的时候
    update set table_a.v1 = table_b.v1 , table_a.v2 = table_b.v2
when not matched then   ---当on里面的条件成立无结果的时候
    insert  (table_a.v1,table_a.v2...)
    values    (table_b.v1,table_b.v2...);  ----matched 和 not matched 可以只用一个,也可以同时都用

--例子:    
create table test_a (
       a varchar2(5),
       b varchar2(5),
       c varchar2(5)
);

alter table test_a
  add constraint PK_TEST_A primary key (a);

create table test_b (
       a varchar2(5),
       b varchar2(5),
       c varchar2(5)
);

alter table test_b
  add constraint PK_TEST_B primary key (a);

insert into test_b (
select '1','2','3' from dual
union
select '2','3','4' from dual);

insert into test_b (
select '1','1','1' from dual
union
select '3','4','5' from dual);

merge into test_a a
using test_b b
on (a.a=b.a)
when matched then
    update set a.b=b.b,a.c=b.c
when not matched then
    insert (a.a,a.b,a.c)
    values(b.a,b.b,b.c);
    
--merge into 和 update 比较,merge into  是查出整批结果后一起更新,update 是查出一个结果后去更新,直到所有数据更新完成,
--因此,merge into 无法找到相关更新的记录数,而update可以,但是,因为update 更新一条数据后,需要重新判断where 的限制条件,所以merge into 的执行效率是update 的将近10倍

----asciistr()
--将字符串转换成ascii字符串
--例子:
select asciistr('我是 好人 a') from dual ;
--该转换函数可以用来判断字符串是否有中文,如果是中文字符,那转换后,就会带‘/’ ,需要注意的是,如果本身就带‘/’,那转换后还是有‘/’,
--所以要先去掉原先的‘/’,再做判断
--例子:
select asciistr('/ asd我是 ?!@#$%\ ') from dual where --replace(asciistr('/ asd我是 ?!@#$%\ '),'\ ',' ') -- like '%\%' ;
where asciistr(replace('/ asd我是 ?!@#$%\ ','\ ',' ')) like '%\%';

---chr()
---chr()函数是将ascii码->字符,对应关系参照ascii编码表
select chr(32) from dual ;

----ascii()
----ascii()函数是chr()函数的反函数,是将字符转换成ascii码
select a from (
select chr(10) a from dual ) where ascii(a) ='10';

----replace()
--替换函数,replace(a,b,c) 将字符串a中所有的b字符或字符串替用c字符或字符串替换,也可以去空格
select replace('asd asaa' ,' ','') from dual ;

----trim()
---去空格函数,需要注意的是,trim函数,只是去掉左右两端的空格,且只能是用space敲打的空格,如果是其他形式的空格,如回车,是无法去掉的
select trim(' 我想做 个 好人 ') from dual ;

--去除其他形式的空格
--1.先判断这个空格的实际对应的ascii码值,ascii码32对应的是正常的空格,小于32,对应的是其他形式的空格
select ascii(substr('abcd ',5,1)) from dual ;
--2.用replace 加存在这个ascii码值对应的字符替换成空
select replace('abcd ',chr(ascii(substr('abcd ',5,1))),'') from dual ;

----fn_jqzd(),截取函数,参数有3个,字符串和分割符和位数
select fn_jqzd('asda|1231','|',1), fn_jqzd('asda|1231','|',2) from dual ;

--查看一个表的主键
select a.constraint_name,  a.column_name
 from user_cons_columns a, user_constraints b
 where a.constraint_name = b.constraint_name
 and b.constraint_type = 'P'
and a.table_name = 'TAB';

---重复数据只保留一条 ,rowid 是唯一标志物理位置的一个id,因此,只要保留一个最大的,或者最小的rowid
--根据主键分组,取每组的最大或最小的rowid,保留下来,就行了

delete from  table_a  where (key1, rowid) not  in
(select key1, max(rowid) from table_a group by key1);
--比较下面的写法
delete from table_a where key1 in (select key1 from table_a group by key1 having count(*)>1) and rowid
 not in (select max(rowid) from table_a group by key1 having count(*)>1);
 
delete from table_a where key1 in (select key1 from table_a group by key1 having count(*)>1) and rowid
 not in (select max(rowid) from table_a group by key1);

delete from  table_a  where  rowid not  in
(select  max(rowid) from table_a group by key1);
--rowid 和 rownum  ,rowid 是唯一标志物理位置的一个id,rownum 是对结果集的编排顺序
--rownum 始终是从1开始,所以rownum>2永远为假,是无法查出数据的,如果要用,要么实例化,要么用rownumber() over
--例1:
select rownum ,t.a from (
select '1' a from dual
union all
select '2' a from dual
)t where rownum>=2;
--例2:
select rn,a from (
select rownum rn,t.a from (
select '1' a from dual
union all
select '2' a from dual
)t) where rn>=2;

----数据库闪回语句(闪回到固定时间点上)
alter table jw_pk_kbcdb enable row movement;
select count(*) from jw_pk_kbcdb as of timestamp to_timestamp('2016-10-06 9:30:00','yyyy-mm-dd hh24:mi:ss');
flashback table jw_pk_kbcdb to timestamp to_timestamp('2016-10-06 9:30:00','yyyy-mm-dd hh24:mi:ss');

--查看死锁情况(如果存在死锁情况,执行最后一个text字段下的内容解锁)
SELECT   A.OWNER, A.OBJECT_NAME,B.XIDUSN,B.XIDSLOT,B.XIDSQN,B.SESSION_ID,B.ORACLE_USERNAME,B.OS_USER_NAME,B.PROCESS,B.LOCKED_MODE,C.MACHINE,C.STATUS,         
C.SERVER,C.SID,C.SERIAL#,C.PROGRAM,'alter   system   kill   session   '''||sid||','||serial#||''';' text       
FROM   ALL_OBJECTS   A,V$LOCKED_OBJECT   B, SYS.GV_$SESSION   C     
WHERE   (A.OBJECT_ID=B.OBJECT_ID)AND(B.PROCESS=C.PROCESS)ORDER   BY   1,2 ;

--闪回被drop掉的表
flashback table test_drop to before drop;

备注:随笔中内容来源于网上资料整理,仅供参考。

Oracle or Question Solve(二)的更多相关文章

  1. Oracle or Question Solve(一)

    Oracle查看版本命令:select * from v$version; ORACLE_BASE和ORACLE_HOME路径查看su - oracleecho $ORACLE_BASEecho $O ...

  2. oracle入坑日记<二>认识oracle(含sqlplus基础使用)

    1.SID(数据库实例) 1.1. oracle安装的时候有一项叫[全局数据库名]的填写项,这个就是oracle的SID也是数据库的唯一标识符: 1.2.一个oracle数据库有且只有一个SID(一般 ...

  3. centos 安装oracle 11g r2(二)-----监听配置与创建数据库实例

    centos 安装oracle 11g r2(二)-----监听配置与创建数据库实例 一.监听配置(命令:netca) 1.以 oracle 用户输入命令,启动图形化工具配置监听 [oracle@lo ...

  4. [独孤九剑]Oracle知识点梳理(二)数据库的连接

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  5. Oracle 数据库基础学习 (二) 学习小例子:创建一个表,记录商品买卖的情况

      运行环境:Oracle database 11g + PL/SQL Developer ex: --创建一个表 create table plspl_test_product( --加入not n ...

  6. Oracle 学习系列之二(会话与事务级临时表和dual表 )

    一. 会话临时表 --创建会话临时表create global temporary table tmp_user_session(user_id int, user_name varchar2(20) ...

  7. Oracle—RMAN备份(二)

    在Oracle  RMAN备份(一)中,对各种文件在RMAN中备份进行了说明, 一.备份集的复制 在RMAN 备份中,可以备份其自己的备份,即备份一个文件放在多个目录下,oralce支持最多备份四个. ...

  8. Oracle使用学习笔记(二)_Sql语句

    一.Sql语句的分类 数据操作语言,简称DML(data manipulation language),如增加,删除,修改,查询数据等 数据定义语言,简称DDL(data defination lan ...

  9. 教师信息管理系统(方式一:数据库为oracle数据库;方式二:存储在文件中)

    方式一: 运行截图 数据库的sql语句: /*Navicat Oracle Data TransferOracle Client Version : 12.1.0.2.0 Source Server ...

随机推荐

  1. 涛涛的小马甲 Android之Handler机制

    首先需要了解一个基本的概念ANR:Application not response 即应用程序无响应,也就是俗话说的死机. 出现Anr的原因是: 主线程需要做很多重要的事情,响应点击事件,更新UI如果 ...

  2. sysbench - 数据库功能及性能测试工具

    sysbench 的 GitHub 参考资料 1.0 之后的版本使用方法跟之前的有所区别,下面所有内容基于 1.0.9 版本. 另外,为了方便管理测试,最好不要通过命令直接运行测试,而是写成脚本自动化 ...

  3. tensorflow 之Dataset数据集之批量数据

    ###生成批次数据 import tensorflow as tf '''reapt()生成重复数据集 batch()将数据集按批次组合''' file_name = ['img1','img2',' ...

  4. 在LIPS表追加拣配数量PIKMG字段(转)

    原文地址:https://blog.csdn.net/zhongguomao/article/details/43451127 最近比较忙,此方案出后测试了很多种情况都存在问题,只能留待以后处理了.. ...

  5. 严重: StandardWrapper.Throwable org.springframework.beans.factory.BeanCreationException: Error creating bean with name

    HTTP Status 500 - Servlet.init() for servlet mybatis threw exception type Exception report message S ...

  6. [洛谷P1552] [APIO2012]派遣(左偏树)

    这道题是我做的左偏树的入门题,奈何还是看了zsy大佬的题解才能过,唉,我太弱了. 左偏树总结 Part 1 理解题目 很显然,通过管理关系的不断连边,最后连出来的肯定是一棵树,那么不难得出,当一个忍者 ...

  7. 1.openshift搭建

    第1章 主机规划和所需文件 1.1 主机规划 IP地址 域名 用途 11.11.233.125 master01.song.test.cnpc 容器编排.etcd 11.11.233.126 mast ...

  8. WEB应用安全解决方案测试验证

    WEB应用安全解决方案测试报告 --- By jiang.jx at 2017-08-11 WEB应用安全解决方案.docx 链接:https://share.weiyun.com/068b05467 ...

  9. 2.Web中使用iReport 整合----------创建html格式的

    转自:https://wenku.baidu.com/view/104156f9770bf78a65295462.html 1.

  10. 2018-2-13-Win10-UWP-Intro-to-controls-and-events

    title author date CreateTime categories Win10 UWP Intro to controls and events lindexi 2018-2-13 17: ...