plsql
文章平均质量分 56
罗小树
这个作者很懒,什么都没留下…
展开
-
oracle如何替换掉unicode字符
一、问题描述执行sql:select cm.custname, replace(cm.custname, UNISTR('\FEFF'), '') from myuser cm;这行sql已经说明了如何换掉unicode字符,配合replace、unistr就行了说下有特殊unicode字符会带来什么问题:当你执行查询语句时,会发现select cm.custname from myuser cm where cm.custname = '许婷';查不出结果(但从表.原创 2021-05-19 14:17:40 · 1139 阅读 · 0 评论 -
Oracle sql技巧--替换字段中的所有空格
最近需要进行数据库迁移,原来在oracle中的表里存储的数据带有空格,新表里存的数据不带空格举例:原来是"1, 2, 3, " 现在存的是"1,2,3"解决方法如下:方法一:使用replace函数select replace('1, 2, 3 ', ' ', '') from dual;方法二:使用regexp_replace函数select regexp_replace('1, 2, 3 ', '\s+', '') from dual;...原创 2020-09-04 13:56:17 · 2985 阅读 · 0 评论 -
64位plsql远程连接64位oracle数据库
一、开发环境说明plsql版本 11.0.4.1788(64位)远程oracle数据库版本 oracle11g R2 server 64位(linux,windows都行)二、步骤1.安装plsql2.下载oracle连接客户端 instantclient-basic-windows.x64-12.2.0.1.0.zip(地址:http://www.oracle.com/technetwork/d...原创 2018-06-27 21:29:22 · 2325 阅读 · 0 评论 -
oracle根据不同条件修改同一字段的值
一、问题说明:现在从my_resource表中查询出如下结果select vc_name from my_resource;需要将查询结果列中的“打款”换成“立项”,“交割”换成“交付”,“结束”换成“退出”,使用update语句实现二、问题解决:1.先考虑如何写查询语句,暂时不做update操作;只考虑其中一个条件,如:“打款”换成“立项”select vc_name, replace(vc_n...原创 2018-07-10 23:46:32 · 10445 阅读 · 2 评论 -
解决PLSQL提示 is not a valid date and time
我在使用plsql生成插入语句时,报了一个错,提示“is not a valid date and time”原因:主要是oracle的日期格式和windows系统的日期格式不符解决办法:将短日期格式由原来的改成问题就解决了参考链接:https://jingyan.baidu.com/article/dca1fa6fa07300f1a44052f7.html...原创 2018-07-04 21:21:18 · 29395 阅读 · 4 评论 -
oracle中update语句修改多个字段
如需要修改下列数据:表名为student一般会这样写:update student set sname = '李四', sage = 20, sbirthday = to_date('2010-01-01', 'yyyy-mm-dd'), saddress = '广州市越秀区'where sid = 1;如果字段非常多,这样写就稍微麻烦点,因为待修改字段和...原创 2018-07-04 21:31:58 · 191147 阅读 · 2 评论 -
oracle plsql基础学习
为了学习plsql基础语法,记录了一些简单的例子循环(1)for循环declare l_start number:=1; l_end number:=10;begin for i in l_start .. l_end loop dbms_output.put_line('i ======= ' || i); end loop;end; ...原创 2018-08-15 21:06:04 · 244 阅读 · 0 评论 -
如何向Oracle数据库中插入带特殊符号“&”的数据
insert into p_product(productId, productName) values(1, '手机&电脑');这条插入语句在plsql中不能正常执行,会弹出下图所示的框:解决:将语句改成下面的即可正常执行insert into p_product(productId, productName) values(1, '手机'||'&'||'电脑...转载 2018-08-15 21:22:00 · 2166 阅读 · 0 评论 -
plsql中如何一次性将查询语句中的多个值赋给对应的变量
create or replace function "FIND_STUDENT_BYID"(studentId in number)return varchar2 is studentName varchar2(500); --学生姓名 studentAge number; --学生年龄begin --根据学生id查询对应的学生信息‘ sel...原创 2018-08-08 17:16:08 · 7175 阅读 · 0 评论 -
[oracle自定义函数]根据数据库表生成对应java代码的实体类属性
一、问题描述现有一张学生表(student),需要编写一个函数实现下图的输出:(1)暂时不考虑数据库表字段类型和java代码中字段类型的对应关系,一律用String(这个后续在函数中添加判断就行)(2)能获取字段名,及字段注释二、代码实现create or replace type "T_RET_TABLE" as table of varchar2(1000);...原创 2018-10-02 21:33:14 · 1597 阅读 · 0 评论 -
[oracle存储过程]批量创建sequence
如:在当前用户下创建两个sequence,seq_student和seq_score思路:使用v_array存放需要创建的sequence的名称集合--批量创建sequencedeclare type v_array is varray(2) of varchar2(100); v_index number; v_arr v_array:=v_array('student'...原创 2018-09-30 17:19:33 · 1294 阅读 · 0 评论 -
ORA-01502: 索引''或这类索引的分区处于不可用状态
参考https://blog.csdn.net/hawksoft/article/details/52687421,select index_name from user_indexes where status = 'UNUSABLE';然后拿到index_name,重建失效索引alter index 索引名称 rebuild;发现数据库里有90多条失效索引,如果一个一个拼的...原创 2018-10-10 14:20:06 · 2052 阅读 · 0 评论 -
如何在plsql中调试带有pipelined的函数
问题说明:如果直接右键点击函数,选择“Test”,然后输入参数,运行会发现行不通(row_split函数见https://blog.csdn.net/u010999809/article/details/79825731) 解决方法:像下面这样写,就能够进行断点调试了(参考链接:https://stackoverflow.com/questions/35128472/how-t...转载 2019-01-09 19:59:06 · 841 阅读 · 0 评论 -
Oracle 记一次sql优化(有关子查询和关联查询)
最近同事有条查询sql,需要做下优化。其实最后得出的结论,就是关联查询速度快于子查询写这篇的目的主要是把尝试过的方法给记录下,同时复习下有一段时间没有用过的oracle存储过程、自定义函数、包的写法一、问题说明为了说清楚问题的核心,我把跟业务逻辑有关的东西去掉了,简单说下需要查的东西:表结构:现在需要查询各班级下的所有学生的名称(两个字段:班级id classId,学...原创 2019-05-30 18:57:32 · 3852 阅读 · 0 评论 -
oracle存储过程中ORA-01403: 未找到数据 问题解决方法
原文链接:https://blog.csdn.net/hp961218/article/details/80002256错误提示:ORA-01403:未找到数据产生原因:当查询不到数据时,且把查询结果注入到定义的变量里面解决方法: 1.跳出此次存储过程: 可以写个错误提示: when not_data_found then --后面一般接错误...转载 2018-06-12 13:01:57 · 62618 阅读 · 2 评论 -
[oracle自定义函数]pipe row 将一个字符串拆分成多条记录
写法一:通过基础函数及简单算法,加上自带的pipe row函数来实现(参考链接:https://blog.csdn.net/goodleiwei/article/details/11484991)1.创建需要返回的类型create or replace type t_ret_table as table of varchar2(1000);2.编写函数(我在原来基础上添加了去...原创 2018-04-05 13:28:21 · 4795 阅读 · 0 评论 -
[oracle存储过程]输出数据库中表的数量
创建存储过程create or replace procedure countTableNum is x number; y number; z number;begin select count(*) into x from user_tables; select count(*) into y from user_tables where num_rows=0;原创 2018-01-24 09:19:13 · 1812 阅读 · 0 评论 -
[oracle自定义函数]查询表格的行数
假如要查的表为emp(员工表),在scott用户下默认有这张表。当前有14条记录。只需要执行select count(*) from emp;需求:现在要把表名变成动态传入的,想查哪张表的行数只要传入表名就行了一、准备工作在写这个之前,我们先来写一个根据员工id(empno)查询员工姓名(ename)的自定义函数(getEmpName)creat原创 2018-01-06 23:12:37 · 3187 阅读 · 0 评论 -
[oracle存储过程]将给定数据与已有的数据做比较
一、问题描述数据表student中的数据(表格创建、数据插入语句在文末附上)给定数据是以逗号形式分隔的,这里是'张三, 李四, 王五, 赵六, 钱七,'现在需要查出,给定数据里有哪些数据是student表里的sname列中不存在的。(这里数据量小,可以马上看出“赵六”、“钱七”没有)编写一个存储过程,实现上述功能(要求:能够传1.需要比较的数据 2.待比较的表的表名...原创 2018-01-24 17:06:45 · 1717 阅读 · 0 评论 -
Oracle sql技巧--字符串分离
字符串分离情形一:select substr(t, 1, instr(t, ',', 1) - 1) from (select substr(s, instr(s, ',', 1, rownum) + 1) as t, rownum as d, instr(s, ',', 1, rownum) + 1 from (...原创 2018-03-21 21:38:34 · 1026 阅读 · 0 评论 -
如何从oracle自定义函数中返回动态结果集
需要用到管道函数(pipelined function),具体做法可以参考https://stackoverflow.com/questions/14155844/return-resultset-from-functionhttp://www.oracle-developer.net/display.php?id=422https://stackoverflow.com/questions/47...转载 2018-04-01 11:33:25 · 2806 阅读 · 0 评论 -
[oracle自定义函数]生成复杂序列
一、问题描述现在需要生成如下图所示的序列函数的具体要求:(1)传入一个终值endNumber,使用number类型存放(2)序列中的每个数需要以何种方式重复出现(如:时间、金额或者只是单次重复出现) 重复模式titleArr,使用plsql中的自定义type来存放(这里其实是当作数组来用)(3)返回结果是一列按给定规则出现的字符串构成的结果集,使用plsql中的自定义type来存放(用到pl/sq...原创 2018-04-14 15:50:34 · 2016 阅读 · 0 评论 -
[oracle自定义函数]根据年份查询指定季度的最后一天
通过sql查询指定年份下给定季度的最后一天,如传入2018年的1季度,则返回2018-03-31这个在oracle中没有特定的函数可以直接实现这个功能 select add_months(trunc(to_date('2018-01-01', 'yyyy-mm-dd') + 1, 'q'), 1 * 3) - 1 as resultDay from dual; 把以上的s...原创 2018-04-14 19:27:45 · 2224 阅读 · 2 评论 -
Oracle sql技巧--生成序列
1.获取未来4年的年份序列select to_char(add_months(sysdate, (level - 1) * 12), 'yyyy') as yearSeq from dualconnect by level <= 4;查询结果:2.获取包含当季的过去4个季度,并升序排列--获取当前季度并向前推4个季度select to_char(add_months(trunc(sy...原创 2017-07-29 09:08:26 · 1030 阅读 · 0 评论 -
[oracle存储过程]统一修改数据库中的sequence当前值
一、问题描述现在需要将数据库中的所有sequence的当前值增加1000。编写一个存储过程,传入1000,将所有sequence的值增加1000;若传入-1000,将所有的sequence的值减少1000。二、实现功能先写一个临时测试的过程,declare seq_name varchar2(100); l_currval number; --序列的当前值 curs原创 2018-04-14 20:44:53 · 3913 阅读 · 0 评论 -
[oracle自定义函数]将数据去重后以逗号分隔
oracle以逗号分隔,可以使用wm_concat,但该函数本身不能将分组后重复数据去重后,再以逗号分隔。最近写sql中分组统计有这个需求,有位同事百度搜索了“oracle 逗号分隔 去重处理”,找到了解决方法。感谢大神,感谢同事!以下内容转载自:http://aniyo.iteye.com/blog/2109260sql结果集某列值显示如下:'00010430, 00228290转载 2018-04-14 21:30:00 · 1392 阅读 · 0 评论 -
[oracle自定义函数]计算时间差(年y,月M,日d,时h,分m,秒s)
create or replace function time_diff(param_date1 in date, param_date2 in date, var_options in varchar2)return numberascalc_result number;--计算时间差(年y,月M,日d,时h,分m,秒s)--参考链接:https://blog.csdn.net/sun...原创 2018-04-09 22:40:32 · 1298 阅读 · 0 评论 -
Oracle sql技巧--分组统计
select deptno, ename, sal, sum(sal) over(partition by deptno order by deptno desc, sal desc) dept_sum, --组内合计 sum(sal) over(order by deptno desc, sal desc) total_sum, --对所有...转载 2018-04-11 22:42:36 · 751 阅读 · 0 评论 -
[oracle存储过程]给表中分好的各组进行组内编号
现在需要给表myrecord的vc_period字段添加数据(表格创建、数据插入语句在文末附上),添加前后的情况如图所示: 编写存储过程,代码如下:这里的存储过程执行一次就完了的那种,还有一种是会写入oracle数据库的。(想尝试存储过程不同写法,可以参看[oracle存储过程]将给定数据与已有的数据做比较)declare n_lid number; --主键id n_projectId ...原创 2018-04-12 00:21:04 · 1019 阅读 · 0 评论 -
刚装完pl/sql的常用设置
一 、如何显示行号 参考:http://blog.sina.com.cn/s/blog_5f2521320101al8c.html1、工具-首选项-用户界面-编辑器-其它-显示行数2、工具-首选项-窗口类型-SQL窗口-显示隔号(行号) 二、如何加亮当前编辑行 效果图:步骤:工具-首选项-用户界面-编辑器-其它-显示行数 补充:...原创 2017-07-20 10:59:04 · 469 阅读 · 0 评论