
SQL语法
文章平均质量分 69
平常练习的sql各种函数应用
爱学习的ljz
这个作者很懒,什么都没留下…
展开
-
2021-06-02 解决listagg 拼接字段返回过长 (Ora-01489 result of String concatenation is too long)
在Oracle 查询数据时有时候会需要用到 列转行, 把多行拼接在一起,一般我习惯使用listagg()函数,但是如果拼接的记录太多会报错.listagg 拼接返回的类型为varchar ,最大长度为4000,当长度过长时会报错, ora-01489 result of String concatenation is too long此时的解决思路就是 将返回的varchar类型 转换为clob类型,这样长度就可以满足返回值的要求了.1.使用xmlagg 函数 ,使用方式和listagg类似,但是.原创 2021-06-02 16:50:18 · 17039 阅读 · 0 评论 -
2021-05-21 Oracle Merge Into 更新表数据
Merge into使用版本: Oracle 9 及以上版本作用:在平常更新表数据时 有时候需要判断存在记录就更新数据,不存在则插入记录,我们需要先判断数据是否存在,需要两条sql, 现在使用merge into 就可以一条sql解决 更新数据和插入数据的问题了语法 merge into t1 -- 要更新数据的目标表 using t2 -- 要用来更新目标表数据的源表 on (条件) -- 目标表与源表的查询结果 when matched then update原创 2021-05-21 19:12:50 · 1279 阅读 · 0 评论 -
2021-04-15 Oracle使用存储过程来处理 sql 插入长文本 报错ORA_01704
问题描述 :在Oracle 中有的表字段需要存储的数据比较长,需要用clob等字段来存储,如果要插入的该字段很长的话,执行该sql 可能会报错, Oralce 会报错 ORA_01704,原文字符串太长 , 可以使用 存储过程来解决这个问题.存储过程语法DECLARESTR CLOB;BEGIN STR:=' 长文本 ;INSERT INTO A(ID,TEXT) VALUES(SYS_GUID(),STR);END;上面sql语句 向 A表插入了一条记录,id字段取uuid,tex原创 2021-04-15 18:45:38 · 541 阅读 · 0 评论 -
2021-01-29 Oracle SQL实现动态设置查询条件
之前遇到一个需求:在查询某个表(A)的数据时需要按照查询规则来查询,就是在另一个表(B)配置一条记录,按照这条记录的设置来查询A表符合条件的数据,B表记录规则如下,数据为多个查询条件之间用‘ ’空格来连接,...原创 2021-02-03 17:07:21 · 2140 阅读 · 0 评论 -
2020-11-30 Oracle start with .. connect by查询查询父节点和子孙节点
最近有个需求是选中某个商品分类时需要递归查询该分类以及 该分类下所有的子分类以及子分类下的子分类等等 的商品,正常来说需要递归查询某个分类以及所有的子孙分类需要使用递归查询,一直到该分类没有子节点为止,但是这样效率是比较慢的,还会造成对数据库的多次访问,为了提高效率,从网上了解学习了下sql有没有办法直接实现这样递归查询的功能, Oracle数据库 start with connect by 恰好提供了这样的功能。表 type 表结构为 ( id varchar2(10) , name v原创 2020-11-30 15:59:39 · 2019 阅读 · 4 评论 -
2020-11-13 ORA-01791:not a Selected expression 不是 SELECTed 表达式
今天在oracle数据库运行一句sql查询语句时报错 ORA-01791:not a Selected expression 不是 SELECTed 表达式 ,sql语句简化以后如下select distinct id,name,sex from users where name is not null order by age上网查询了一下好像 distinct 与order在一起出现的问题,解决方法考虑了三种不使用distinct去重 ,删除distinct关键字,在查询字段上添加要排序的原创 2020-11-13 15:42:43 · 1162 阅读 · 0 评论 -
2020-11-02 oracle sql listagg函数使用
listagg 函数的作用就是将多行记录合成一行记录基础用法:listagg(a,b) within group(order by c)a指的是要进行拼接的字段, b指的是连接字段与字段之前的连接符号 c指的是按照什么顺序将字段连接,sql语句最后面要使用group by 分组,listagg是将分组之后的字段数据进行拼接,如果没有最后没有分组会报错 ora00937:not a single-group group function.假设现在存在一个表users,包含以下字段 用户编原创 2020-11-12 16:54:46 · 1757 阅读 · 0 评论 -
2020-11-11 oracle sql case when流程控制
oracle sql case when 用法sql语句中 case有两种用法,简单case函数和case 搜索函数假设现在存在一个表users,包含一下字段 用户编号( id varchar2(30) , ) 用户姓名 (name varchar2(100) ,) 用户年龄 (sex number , ) 男:1 , 女:0 用户部门(dept varchar2(20) ,)分为 a,b,c,d四个小部门,a、b属于大部门一部,c、d属于二部。简单case函数原创 2020-11-11 21:59:08 · 840 阅读 · 0 评论 -
2020-11-10 oracle 数据库sql 之decode函数
sql decode函数目前只有oracle支持decode函数,他可以用来优化流程控制语句,来替代用if-then-else或 case when then else end之类繁杂的流程控制语句。函数语法decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)函数含义IF条件=值1THENRETURN(返回值1)ELSIF条件=值2THENRETURN(返回值2)…ELSIF条件=值nTHENRETURN(返回值n)ELSERETURN(缺省值)E原创 2020-11-10 11:31:33 · 604 阅读 · 0 评论 -
2020-11-03 oracle sql根据身份证号来判断性别
最近做的一个功能用到了用户的性别,但是之前oracle数据库中存的性别有问题,所以需要根据用户的身份证号来更正性别。性别和身份证号倒数第二位是相关联的,倒数第二位是奇数,性别就为男,为偶数,性别为女sql 语句 使用了 substr函数来取倒数第二位,substr(sfzh,-2,1) 第一个参数是要取值的字符串,在这里就是用户的身份证号,第二个参数就是开始位置,负数表示倒数的位置,-2就是倒数第二个字符,最后一位是要取的字符串长度,取一位。使用了to_number函数,从substr取出来的原创 2020-11-03 22:14:01 · 3509 阅读 · 0 评论 -
2020-10-20 oracle sql查询近期时间的几种方法 (解决报错ORA-01873)
Oracle 对于时间的查询查询当前时间 :select sysdate from dual --dual为数据库的虚拟表,为了满足from的格式假设存在表 test_table ( id varchar(50) ,name varchar(50),createtime date )表中简单三个字段 id 、name、createtime,分别为varchar、varchar、date类型。1. 利用 -interval ‘num’ 单位注意:num的数字限制在-99到99之间,比如原创 2020-10-20 18:11:05 · 2362 阅读 · 0 评论