函数 REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) __srcstr...select regexp_substr('60,70,80,90,100','[^,]+',1,1) result from dual; --60 select regexp_substr('60,70,80,90,100...','[^,]+',1,2) result from dual; --70 select regexp_substr('60,70,80,90,100','[^,]+',1,3) result from...dual; --80 select regexp_substr('60,70,80,90,100','[^,]+',4,1) result from dual; --70 select regexp_substr...,4,3) result from dual; --90 CONNECT BY LEVEL Oracle中使用connect by 来实现树状查询,可以使用level这个伪列来实现分层查询 SELECT
前两天朋友提了一个和SQL有关的问题,准确地说,是和字符串转换有关的,首先我们创建测试表,用模拟数据进行说明, SQL> CREATE TABLE test(a VARCHAR2(30));Table...我们以Oracle 11g为测试库,有几种的想法, 想法1.如果记录有限,一种简单的方法,可以采用穷举,利用substr函数,拼接出检索结果,功能上可以实现,但是扩展性,可能会差一些。...(1)和(2)的中间结果集,如下所示, SQL> SELECT substr(regexp_substr(a, '[^,]+',1,level),3,7)||'.'...、connect by level、length、decode等,但是有些函数,可能是Oracle特有的,如果使用MySQL实现相同的需求,listagg函数可以用group_concat替代,regexp_substr...在MySQL 5.x中是不支持的,而且connect by level是没有直接能用的,据说需要自定义函数来实现,所以在Oracle中能跑的SQL不能直接在其他数据库用,因此,如果朋友们对MySQL比较熟悉
同事提了个需求,表中一个字段,存储格式例如abc_x_cd,需要通过SQL拼接出另外一个值,例如abc_x_cd abc x cd,即根据原始值,按照"_"分割,按照每个部分,再通过空格,和原始值拼接。...但是在Oracle,没有split函数,如何实现需求?...创建测试表, create table t (c1 varchar2(25)); insert into t values('abc_x_cd'); select * from t; 方案1 利用正则regexp_substr...和listagg,能实现这个需求, select c1 || ' ' || c2 from t, (select listagg(regexp_substr(c1, '[^_]+', 1, rownum...(order by rownum) as c2 from t connect by rownum <= length(c1) - length(replace(c1, '_', ''))+1) a; regexp_substr
上次《字符转换的SQL需求》讨论的需求,使用各种函数,实现了字符转换的需求,但通过朋友指教,其实存在些问题。...这是原来的写法, SQL> SELECT listagg(x.a, ';') within GROUP (ORDER BY x.a) FROM 2 (SELECT substr(regexp_substr...connect by level <= regexp_count(a, '[^,]+')) x; 因为当时只测了一条数据的场景,所以用这种方法,对多条数据,是会有问题的,如下所示,test存在两条数据,执行SQL...,SX000002,SX000003SQL> SELECT listagg(x.a, ';') within GROUP (ORDER BY x.a) FROM 2 (SELECT substr(regexp_substr...黄老师则指出,用Oracle的SQL可以直接在达梦中跑。 谢谢各位朋友,若还有好的建议,欢迎随时留言,谢谢。
ORA-01722: invalid number 问题 invalid number 字符与数值不匹配 oracle 截取 ‘1-2’ 只需要’-'前面的 思路 一、问题提示 执行Oracle的sql...解决 使用Oracle的REGEXP_SUBSTR函数进行截取: SELECT REGEXP_SUBSTR('1-2', '[^-]+') FROM dual; 这里,REGEXP_SUBSTR函数用于从字符串中按照正则表达式匹配并截取子字符串
不同区域出现的相同的Sql语句,要保证查询字符完全相同,以利用SGA共享池,防止相同的Sql语句被多次分析。 多利用内部函数提高Sql效率。...需要注意的是,随着Oracle的升级,查询优化器会自动对Sql语句进行优化,某些限制可能在新版本的Oracle下不再是问题。...优化器 1.Oracle优化器(Optimizer)是Oracle在执行SQL之前分析语句的工具。...Oracle8及以后版本,推荐用CBO方式。 Oracle优化器的优化模式主要有四种: 1.Rule:基于规则; 2.Choose:默认模式。...对列和索引更新统计信息的SQL: SQL> ANALYZE TABLE table_name COMPUTE STATISTICS; SQL> ANALYZE INDEX index_name ESTIMATE
写了个视图导致出现报错:网上说是Oracle 10.2.0.4和10.2.0.3版本的一个bug SELECT A....*FROM PL_PLAN_BASE A left JOIN (SELECT B.CATEGORY_ID, REGEXP_SUBSTR...*FROM PL_PLAN_BASE A left JOIN (SELECT B.CATEGORY_ID, REGEXP_SUBSTR...,DEPT_CODE FROM BI_DEPT ) D ON D.DEPT_CODE=A.APPLY_DEPT_CODE 2 如果关联语句太多就会报错 比如上面的. 3 解决办法: 1 修改SQL...这边是针对该版本,后面的版本ORACLE 是修复了
相信有不少朋友是喜欢使用正则表达式来解决问题的,像一些主流的数据库 mysql 、oracle 是原生支持正则表式的。...字段中以元音字符开头或以 'ok' 字符串结尾的所有数据: mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$'; 如 oracle...修改 /home/xx/db2-regex/scripts/sql/db2_regex_functions.sql 文件,修改 CALL SQLJ.INSTALL_JAR('file:C:\Tivoli.../db2_regex_functions.sql 即可。...请参考我的历史文章 如何写出更快的 SQL (db2) (完)
这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
业务场景:在报表开发中,只需要每个分组最近的一条数据。例如:某天的明细数据中,可能存在多条记录,只需要该天最后更新的一条记录。
', 'yyyy-mm-dd') and cwlx_dm = 'Y' group by substr(a.jywysbh, 1, 4)) 查询性能最差和最耗时的SQL...--性能最差的SQL select * from (select sql_text, disk_reads, buffer_gets, rows_processed from...v$sqlarea b order by disk_reads desc) where rownum <= 10; --最耗时的SQL select * from (select...a.SQL_TEXT, a.CPU_TIME, a.PARSING_SCHEMA_NAME from v$sql a order by cpu_time desc...适用于single instance ----Oracle数据库操作中,会用到锁表查询以及解锁和kill进程等操作 --(1)锁表查询的代码有以下的形式: select count(*) from v$
上次,将MySQL数据迁移到Oracle介绍了如何使用oracle sql developer连接mysql。同样,sql server的连接也比较相似。 具体也可以点击这里查看。...不过,Microsoft发布了sql server jdbc driver 2.0/3.0,他们可以使用于sql server 2005/2008/2008 r2。...是否可以添加sqljdbc4.jar来通过oracle sql developer连接sql server呢?经过测试,目前的oracle sql developer版本无法使用。...这里说明一些使用jtds连接sql server 遇到的问题。
SQL语句按照功能分为三类,数据库操作语言,数据库定义语言,数据库控制语言。
减少访问数据库的次数: ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等; (5) 在SQL*Plus , SQL*Forms...效率.: 复杂的SQL往往牺牲了执行效率....当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 同样在联结多个表时使用索引也可以提高效率....语句用大写的;因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行 (20) 在java代码中尽量少用连接符“+”连接字符串!...为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来.
SQL%NOTFOUND 是一个布尔值。与最近的sql语句(update,insert,delete,select)发生交互,当最近的一条sql语句没有涉及任何行的时候,则返回true。...如: begin update table_name set salary = 10000 where emp_id = 10; if sql%notfound then insert into...SQL%FOUND 的用法与sql%notfound用法相反,也是与最近的sql语句发生交互,如果影响行数大于0条,则为true 否则为false。...SQL%ROWCOUNT在dml语句执行前是null,执行后,对于select into语句,执行成功则值为1,不成功则值为0。
.'); end; 用户自定义异常就是用户定义一个异常情况,遇到这种情况再对这种情况进行处理 因为用户定义的异常不一定是Oracle返回的系统错误,系统不会自动触发,需要在声明部分定义。...而用户自定义异常以及预定义异常不回终止程序,但会终止该 PL/SQL 代码块,所以一个存储过程中可以有多个 PL/SQL 代码块。...关于异常的语法及定义: 什么是异常: PL/SQL用异常和异常处理器来实现错误处理 Oracle中出现错误的情形通常分为编译时错误(compile-time error)和运行时错误(run-time...异常在PL/SQL执行过程中很可能出现 对异常如果不进行处理,异常可能会中断程序的运行 捕获异常的规则: 在异常部分WHEN 子句没有数量限制 当异常抛出后,控制无条件转到异常处理部分 EXCEPTION...编写PL/SQL块,使用SELECT语句将管理者编号为空的员工的姓名及工作编号显示出来,如果符合条件的员工多于一人,则返回字符串“最高管理者人员过多!”
概述 我们知道,Oracle提供的脚本均位于下列目录下 $ORACLE_HOME/rdbms/admin 其中, awrsqrpt.sql用来分析某条指定的SQL语句,通过awrsqrpt.sql脚本,...awrsqrpt.sql获取 artisandb:[/oracle$]sqlplus /nolog SQL*Plus: Release 11.2.0.4.0 Production on Sun Jun...17 17:51:56 2018 Copyright (c) 1982, 2013, Oracle....SQL> @$ORACLE_HOME/rdbms/admin/awrsqrpt.sql Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name...---- 集群中指定特定实例的SQL语句的SQL Report 针对多实例数据库,使用 @$ORACLE_HOME/rdbms/admin/awrsqrpi.sql
尚世波 从事数据库方面工作多年,专注于pl/sql开发、数据库设计、优化方面的研究,喜欢挑战 前文回顾:巧用SQL:oracle pl/sql split函数 看完上次的分享, 我很有感触,在软件开发过程中经常会出现按照某个字符进行分割字符串的情形...文章以‘,’(英文逗号)分割为例,另外设想传入的字符串为未知变量,书写通用的sql进行说明和演示 方法一:sql实现方法之正则表达式 可以使用 Oracle 自带的正则函数 regexp_count 和...regexp_substr 来实现,这种方法很简单,并且考虑了字符串以分隔符结尾的情况。...但要注意的是,该方法中使用的正则函数 regexp_substr 在10g及以后的版本中执行都是比较顺利的,而regexp_count 函数则需要在11g及以后的版本中才能执行。...select regexp_substr('1,25,3,ftet775##,8,6,9', '[^,]+',1,rownum) from dual connectbyrownum<=regexp_count
sql游标 游标的类型: 1、静态游标(不检测数据行的变化) 2、动态游标(反映所有数据行的改变) 3、仅向前游标(不支持滚动) 4、键集游标(能反映修改,但不能准确反映插入、删除) 游标使用顺序: 1...、定义游标 2、打开游标 3、使用游标 4、关闭游标 5、释放游标 Transact-SQL: declare 游标名 cursor [LOCAL | GLOBAL][FORWARD_ONLY | SCROLL...auth_cur cursor for select au_id, au_lname, au_fname, state from authors open auth_cur fetc 相关文档: 1.Oracle...Server Allen Kinsel – SQL DBA Allen White Amit Bansal writes… Andrew Fryer’s Blog Andrew Kelly Andy...Guy Bart Duncan’s SQL Weblog …… declare @ID varchar(10) set @ID=9 –根节点 declare @i int –级数 declare @t
领取专属 10元无门槛券
手把手带您无忧上云