重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在user_objects里面,里面还存储了其他对象,通过object_type区分.
十余年品牌的成都网站建设公司,上1000家企业网站设计经验.价格合理,可准确把握网页设计诉求.提供定制网站建设、购物商城网站建设、微信小程序定制开发、响应式网站建设等服务,我们设计的作品屡获殊荣,是您值得信赖的专业网络公司。
select object_name from user_objects
where object_type='FUNCTION';
这样就能看到函数名称了.
当然,跟别的一样,也有对应的all_objects,dba_objects.
在Oracle中,可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。其语法为:
eg: dbms_lob.instr(字段名(clod类型),'查询条件',1,1)
其中sourceString代表想要查询的字段;
destString代表查询条件;
start代表查找的开始位置,该参数可选的,默认为1;
appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;
如果start的值为负数,那么代表从右往左进行查找。
返回值为:当目标字符串没有在源字符串中找到,返回0;当源字符串或目标字符串为null,则返回null;
其他情况则返回目标字符串在源字符串中的其实位置
分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后基于组计算某种统计值,并且每一组的每一行都可以返回一个统计值。
说白了,分析函数就是 over([query_partition_clase] order_by_clause)。比如说,我采用sum求和,rank排序等等,根据什么来呢?over提供一个窗口,使用partition by进行分组,在组内使用order by进行排序。over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用
分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
用于合计的函数:
用于排列的函数:
其他:
而这样使用就是分析函数:
它们得出的结果是相同的,都是:
请注意,这里我们用到了distinct 关键字,如果不用distinct,第2个查询将返回20行数据,即earnings表的每行记录都将返回一行总收入,因为不用distinct的含义是:针对每个打工者计算他/她所在的月份和地区的总收入。
在这个例子中,聚合函数是更好的选择,但在另外一些情形下,我们更应该使用分析函数。下面通过几个实例来介绍排序分析函数的用途。
问题:统计每个月份,不同地区工资最高的前3名。
利用我们传统的聚合函数max可以方便地取出工资最高的一个员工,但是取出多个就无能为力了,同样,如果不分组我们可以通过排序取出工资最高的前3名,但无法实现对多个月份和地区的分组。而采用rank()分析函数,可以方便地实现我们的要求。
完整的语句如下:
结果为:
我们在开窗函数over()中使用earnmonth(月份)和area(地区)作为分组标志,并按照personincome(收入)倒序排列。
注意:RANK()函数有3组,分别是rank(), dense_rank(), row_number(),它们的区别是:
RANK()如果出现两个相同的数据,那么后面的数据就会直接跳过这个排名,比如:当第2名和第3名的利润相同时,rank的结果是1,2,2,4;而dense_rank()则不会跳过这个排名,结果是1,2,2,3;而row_number()哪怕是两个数据完全相同,排名也会不一样,结果是1,2,3,4.
完整的语句如下:
结果为:
完整的语句如下:
结果为:
结果为:
结果为:
在以上例子中,是用rollup()和cube()函数都会对结果集产生null,这时候可用grouping函数来确认该记录是由哪个字段得出来的.
grouping函数用法,带一个参数,参数为字段名,如果当前行是由rollup或者cube汇总得来的,结果就返回1,反之返回0.
完整语句如下:
结果为:
以上语句统计结果和如下语句使用group by的查询结果一样:
说明:Lag和Lead函数可以在一次查询中取出某个字段的前N行和后N行的数据(可以是其他字段的数据,比如根据字段甲查询上一行或下两行的字段乙),原来没有分析函数的时候采用子查询方法,但是比较麻烦:
语法如下:
其中:
统计每个打工者上个月和下个月有没有赚钱(personincome大于0即为赚钱):
结果为:
Oracle查询用户表空间:select * from user_all_tables
Oracle查询所有函数和储存过程:select * from user_source
Oracle查询所有用户:select * from all_users.select * from dba_users
Oracle查看当前用户连接:select * from v$Session
Oracle查看当前用户权限:select * from session_privs
表空间含义:
表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。
Oracle数据库中至少存在一个表空间,即SYSTEM的表空间。
工具sqlplus或者plsqldeveloper
方法一:sqlplus
①登录用户后,执行下面语句查看当前用户有哪些存储过程:
select name from user_source where type='PROCEDURE';
或者:
select object_name from user_procedures;
或者:
select object_name from user_objects where object_type='PROCEDURE' ;
②找到你所要查询的存储过程名字后,执行下面操作,可以看到存错过程内容:
select text from user_source where name ='xxxx';--(xxxx代表所要查询的存储过程名字)
------------------------------------------------
如果是函数,类似的方法,只需要把PROCEDURE,换成FUNCTION即可
-----------------------------------------------
方法二:pl/sql developer
打开该工具后,在最左侧可以看到如下截图,选择 My objects
然后选择functions或者Procedures,找到想要查看的对象后,选中,鼠标右键,弹出一个选项页,这里主要的几个做一下介绍:
view:查看,不能编辑
edit:可以编辑
drop:删除该存储过程
test:执行该存储过程