![](https://img-blog.csdnimg.cn/cb07b6e1572b424a8bee6d152b18e1ef.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
oracle
文章平均质量分 51
整理ORACLE相关技术,sql语句等内容
心寒丶
java后台,oracle数据库,前端全栈开发,三个臭皮匠,顶个诸葛亮,有问题咱一起解决!只要你问,只要我会(不会可以一起研究),倾囊相授
展开
-
记一次oracle数据库迁移至mysql数据库(表同步)
记一次oracle数据库迁移至mysql数据库(表同步)原创 2023-08-21 23:15:00 · 5182 阅读 · 5 评论 -
Mybatis使用Oracle数据库主键自增
Mybatis使用Oracle数据库主键自增原创 2023-03-20 20:30:00 · 2145 阅读 · 0 评论 -
七夕当然要学会SQL优化好早点下班去找对象
SQL优化技巧原创 2022-08-04 09:48:54 · 338 阅读 · 18 评论 -
Oracle数据类型介绍
Oracle数据类型介绍原创 2022-08-01 20:15:00 · 5525 阅读 · 7 评论 -
oracle触发器的自治事务
oracle触发器的自治事务 ,触发器实现插入数据更新排名原创 2022-07-29 18:15:00 · 3268 阅读 · 5 评论 -
3、存储过程(PLSQL块)异常的传播
存储过程(PLSQL块)异常的传播原创 2022-06-17 13:15:00 · 387 阅读 · 4 评论 -
2、存储过程(PLSQL块)异常申明、捕获与抛出
存储过程(PLSQL块)异常申明、捕获与抛出原创 2022-06-16 21:00:00 · 3153 阅读 · 0 评论 -
1、存储过程(PLSQL块)异常介绍
存储过程(PLSQL块)异常介绍原创 2022-06-15 19:00:00 · 1207 阅读 · 0 评论 -
oracle lag、lead函数
over()表示Lag()与Lead()操作的数据都在over()的范围内,他里面可以使用partition by语句(用于分组) order by语句(用于排序)。partition by a order by b表示以a字段进行分组,再以b字段进行排序,对数据进行查询。例如: lead(field, num, defaultvalue) field需要查找的字段,num往后查找的num行的数据,defaultvalue没有符合条件的默认值,num默认值为1。leg(field, num, defa原创 2022-04-19 18:45:00 · 5392 阅读 · 1 评论 -
oracle时间操作进阶篇整理
oracle时间操作进阶篇整理原创 2022-04-18 17:15:00 · 1277 阅读 · 0 评论 -
oracle字符操作进阶篇整理
oracle字符操作进阶篇整理原创 2022-03-31 20:45:00 · 4181 阅读 · 0 评论 -
oracle获取表索引列、约束列及非索引外键
列举索引列select table_name, index_name, column_name, column_position from sys.all_ind_columns where table_name = 'TEST' and table_owner = 'USER'查询结果如下: 列举约束 select a.table_name, a.constraint_name, b.column_name, a.constraint_type fro.原创 2022-03-31 20:00:00 · 285 阅读 · 0 评论 -
PLSQL设置字体大小
PLSQL设置字体大小原创 2022-03-30 19:15:00 · 10446 阅读 · 0 评论 -
Oracle分区表
Oracle分区原创 2022-03-28 20:30:00 · 3108 阅读 · 4 评论 -
ORACLE根据关键字截取符合需要数据
比如A表有以下数据我们需要截取到agentcode,sql如下:select substr2(a.testjson, instr(a.testjson, 'agentcode') + 12, 11) from a;instr(a.testjson, 'agentcode') 返回的是agentcode第一个字符出现的位置,也就是从a开始算,+12代表截取到我们所需要的数据前边的引号,即以下截图部分。最终查询效果如下...原创 2022-01-19 09:14:10 · 1032 阅读 · 0 评论 -
oracle字符串查询不加单引号报错 ORA-01722:无效数字
今天在查找一个生产问题时,发现一个sql,查询字符串的字段,没有拼接单引号,有时会返回成功,有时会返回失败,理论上来说VARCHAR2类型字段查询时应该加单引号,但是也会返回成功就有点不寻常了,因此仔细查看了下数据,发觉问题所在,因此记录一下,希望大家在以后不再采坑。就随便拿一个现有的表看一下,表结构如下:里边有数据如下:查询数据不加单引号,直接报错ORA-01722:无效数字我们改下sql,这次不加单引号,查询成功由以上两次查询大致可以看出:当在查询的结果中都可以...原创 2021-12-03 10:19:02 · 11797 阅读 · 1 评论 -
ORACLE创建触发器
EDITIONABLE|NONEDITIONABLE,指明触发器是否允 许被编辑。默认为EDITI-ONABLE。BEFORE|AFTER,触发器在触发事件执行之前还是之后 执行。DELETE|INSERT|UPDATE,触发器响应的DML事件。REFERENCING,为OLD、NEW、PARENT伪记录指定 别名,FOR EACH ROW,指定为行级简单DML触发器,即触发 语句每影响一行数据,触发器执行一次。默认为语句级简单 DML触发器,即不管触发语句影响多少行数据,触发器只执 行一次。ENAB...原创 2021-10-20 16:57:16 · 4300 阅读 · 0 评论 -
Oracle常见内置SQL函数
常用数字函数常用字符函数常用日期函数常用转换函数常用空值函数其他函数原创 2021-10-13 14:12:07 · 145 阅读 · 0 评论 -
Oracle数据库中的DML锁
在Oracle中最主要的锁是DML锁,保证事务并发操作时的 数据完整性。DML锁主要包括TM锁(表级锁)和TX锁(行级 锁)。当Oracle执行DML语句时,系统自动在所要操作的表上申 请TM模式的锁。当获得TM锁后,系统再自动申请TX模式的 锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务 加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁是在表上添加的锁。当一个事务执行INSERT、 UPDATE、MERGE、DELET...原创 2021-10-12 14:33:55 · 988 阅读 · 0 评论 -
SELECT语句执行顺序
其中: DISTINCT|UNIQUE|ALL:指定查询结果集中的重复记录 处理方式,默认值为ALL。select_list:指定从数据库中返回的目标列或表达式。query_table_expression:指定数据来源的表、视图或实体化视图等。·join_clause:进行连接查询。 where_clause:限制从数据源中返回的记录需要满足的条件。hierarchical_query_clause:层次查询。group_by_clause:分组查询。order_by_clause:查询结果排...原创 2021-10-11 16:10:39 · 2715 阅读 · 0 评论 -
Oracle事务控制语句
在Oracle 中,事务是原子的,要么全部提交包含在事务中的所有语句(永久的),要么所有语句回滚。这种保护也扩展到单条语句。一条语句要么完全成功执行,要么完全回滚。注意,这里所说的是语句问滚。一条语句的失败不能使它前面执行的语句自动回滚。它们的工作是保存的,要么提交,要么回滚。下面是可以使用的各种事务控制语句。它们是:COMMIT:用最简单形式,可以只写COMMIT。也可以详细地写成COMMIT WORK,两者是等效的。COMMIT结束事务,使改变成为永久的。在分布式事务中,对COM...原创 2021-09-22 09:40:23 · 686 阅读 · 0 评论 -
记一次oracle大量数据模糊查询效率问题
今天在维护程序的时候发现有一个模糊查询效率特别低,三百万数据大约得四五十秒,原sql大致如下:select * from datalog a where a.requestdata like '%121100101%';后来看了下逻辑,大致意思就是必须使用模糊查询来匹配,遂改用以下sql来执行:select * from datalog t where instr(t.requestdata,'121100101')> 0;改之前得四五十秒,改完之后七八秒即可查询出结果。原创 2021-09-15 16:08:44 · 9765 阅读 · 0 评论 -
orcale用户使用其他用户的序列号
授权语句:将seq_test 序列号查询权限赋给AAA用户GRANT SELECT ON seq_test TO AAA;取消授权语句:将seq_test 序列号查询权限从AAA用户回收REVOKE SELECT ON seq_test FROM AAA;原创 2021-09-02 09:36:53 · 932 阅读 · 0 评论 -
oracle删除亿级数据
近期遇到一个日志表记录了几年数据,数据量较大(几亿数据),导致查询等操作较慢,为了效率,决定删除部分历史数据,想了三种方法如下:通用步骤(每种方法之前先运行以下备份脚本):1、备份 2021年之前数据create table table_log_b2020as select * from table_log a where a.logtime<date'2021-1-1';2、备份2021年数据create table table_log_2021as select * f...原创 2021-08-20 10:49:52 · 12658 阅读 · 3 评论 -
oracle去除空格,去除首末制定字符
SELECT length( TRIM(' 5 ')),TRIM( ' 5 ') FROM dual;--默认去除左右空格SELECT length( TRIM(BOTH FROM ' 5 ')),TRIM(BOTH FROM ' 5 ') FROM dual;--默认去除左右空格SELECT length(TRIM(LEADING FROM ' 5 ')),TRIM(LEADING FROM ' 5 ') FROM dual;--去除左边SELECT length(TRIM(TRAILIN.原创 2021-04-20 14:42:53 · 755 阅读 · 0 评论 -
oracle分组拼接
需要处理数据 处理之后数据 SELECT channel, LISTAGG(rank, ',') WITHIN GROUP(ORDER BY rank) AS rankFROM( select distinct a.channel channel, a.rank rank from test a where a.comcode = '11' and a.frequency = 'Month' and a.formulacha...原创 2021-04-16 09:42:21 · 704 阅读 · 0 评论 -
分组排序生成序号 ROW_NUMBER() OVER(PARTITION BY ORDER BY ) 函数
ROW_NUMBER() OVER( [PARTITION BY column_1, column_2,…] [ORDER BY column_3,column_4,…] )根据column_1, column_2,… 分组 根据column_3,column_4,…排序例:有如下数据,需要根据人员分组,按照考试时间排序生成序号select A.* ,ROW_NUMBER() OVER(PARTITION BY a.name ORDER BY A.TESTDATE ) seno fr..原创 2020-09-17 10:27:42 · 9600 阅读 · 0 评论 -
ORCAL更新某一列为000拼接序列号。orcal修改序列号为0001
涉及到历史数据处理,需要对某一列生成规则化代码,如‘H99’+0001update prpccarcooper a set a.cooperationoutletscode='H99'||LPAD(TO_CHAR(seq_aaa.nextval),4,'0');select 'H99'||LPAD(TO_CHAR(seq_aaa.nextval),4,'0') from dual;...原创 2020-08-26 09:16:27 · 9460 阅读 · 0 评论 -
orcal根据分号把一行拆分为多行显示
近期开发一块需求遇到之前用分号拼接保留在一个字段的值需要拆分出来分表保存,所以想了下实现方法数据如下:实现效果如下:单条处理sql:select a.id, a.carcoopercode, substr2(regexp_substr(a.pushmessageinfo, '[^;]+', 1, rownum), 0,instr(regexp_substr(a.pushmessageinfo, '[^;]+', 1, row原创 2020-07-27 11:23:05 · 9932 阅读 · 0 评论 -
orcal根据身份证获取年龄
--根据身份证获取年龄select floor(months_between(SYSDATE,to_date(substr2(a.identifynumber, 7, 8),'yyyy-mm-dd')) / 12) 年龄from A ;--根据出生日期计算年龄select floor(months_between(SYSDATE, to_date(a.birthday,'yyyy-mm-dd'))/ 12) 年龄from A ;...原创 2020-06-17 15:45:29 · 9930 阅读 · 0 评论 -
oracle恢复某段时间之前的数据
1、通过以下sql就可以查询出多少分钟之前的数据select * from testas of timestamp sysdate - 10 / 1440 --test为需要恢复数据的表名 ,10表示十分钟,30则表示30分钟之前的,1440表示一天有1440分钟。2、如果精确到某段时间点,则可以用以下sql查询 SELECT * FROM testAS OF TIMESTAMP to_date('2020-05-14 11:09:21','YYYY-MM-DD HH24:M...原创 2020-05-14 11:17:14 · 12018 阅读 · 0 评论 -
Oracle 错误代码详解及解决方式--ORA
ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程;无法转换会话ORA-00022: 无效的会话 ID;访问被拒绝ORA...原创 2020-04-21 13:46:19 · 23872 阅读 · 7 评论 -
PLS-00201: identifier 'DBMS_LOCK' must be declared 错误
如下,存储过程在执行dbms_lock.sleep(1)时 报错 ,PLS-00201: identifier 'DBMS_LOCK' must be declared;后来发现是没有执行延时语句的权限,需要对用户授权 :GRANT EXECUTE ON SYS.DBMS_LOCK TO Test;(Test为用户名)。...原创 2020-03-30 10:26:36 · 18622 阅读 · 0 评论 -
ORCAL计算司龄是否满一年
查询司龄满一年的人员:select a.partintime, a. * from prpsperson a where months_between(sysdate, a.partintime)/12 >= 1 order by a.partintime desc;Orcal常用时间差计算:1、orcal计算两个时间差的天数(小时,分钟)1、不带时分秒sel...原创 2020-01-08 10:26:19 · 9683 阅读 · 0 评论 -
orcal 一列多行数据拼接显示
原表信息如下: 需要根据code进行分组显示 ,把同一组的名字拼接在一起,用逗号分开select a.code , to_char(wm_concat(a.name)) from AA a group by a.code;效果如下:...原创 2019-12-26 14:52:58 · 9604 阅读 · 0 评论 -
orcal查询12个月份数据,没有则用0补充
根据薪酬表 获取 12个月应发工资,没有则用0补充SELECT a.calcmonthlist 年月, nvl(b.totalsalary, 0) 应发工资 FROM (SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2019-01', 'yyyy-MM'), ROWNUM - 1), 'yyyyMM') AS ca...原创 2019-12-16 19:05:43 · 10978 阅读 · 0 评论 -
excel拼接sql
比如 有以下表数据 目前需要根据提供的表格,需要根据姓名科目修改EXTRA=表格中的加分,总分sum需要等于sun+加分比如第一条:update dd a set a.extra= 5 ,a.sum=a.sum+5 where a.name='语文';当我们需要准备很多这样的sql的时候很麻烦,这个时候我们就可以才用用excel来拼接sql,=CONCATENATE...原创 2019-12-04 17:31:43 · 10051 阅读 · 0 评论 -
orcal删除相同数据
比如有以下数据:需要根据codename删除相同数据, delete from BB twhere t.rowid not in (select max(rowid) from BB t1 group by t1.code,t1.name);执行完再查询就只剩唯一一条了...原创 2019-11-08 17:23:17 · 9458 阅读 · 0 评论 -
orcal四舍五入函数及取整数
1.ROUND(按照指定的精度进行四舍五入)按照指定的小数位进行四舍五入之后返回一个数值,比如:select round(31.1415) from dual; --返回 31 ,不传参数,默认保留整数select round(31.1415,2) from dual; --返回 31.14select round(31.14155,3) from dual; --返回 31.1...原创 2019-11-06 10:11:01 · 12755 阅读 · 3 评论 -
ORCAL递归查询,connect by prior查询
模拟数据如下:查找21下管理的id: Select * from prpstest T start with T.ID = '21'connect by prior T.Id = T.PARENTID ;--查找21下管理的id效果如下查找21010101父级及祖先信息Select * from prpstest T start with...原创 2019-11-05 16:09:15 · 9341 阅读 · 0 评论