pl sql练习(2)
1.尽可能了解oracle的功能,因为很多业务逻辑oracle已经为我们做了,比如oracle已经预定义了大量的异常代码,我们不必要写自己的异常而增加代码的复杂度。
例如oracle定义了当找不到符合要求的数据时定义的异常:no_data_found,而很多开发人员经常使用自己的逻辑去判断是否找到数据。
declare
ln_deptno number;
ln_tempno number:=1;
begin
select deptno into ln_deptno
from scott.dept
where deptno=ln_tempno;
dbms_output.put_line(ln_deptno);
exception
when no_data_found then
dbms_output.put_line('No deptno for: '||ln_tempno);
end;
/ SQL> @a.sql;
No deptno for: 1 PL/SQL procedure successfully completed.
2.管线表函数,可以把她的返回值作为像数据库表 一样在查询语句中使用。
create or replace type color_hex_code as object
(
color_name varchar2(10),
color_code varchar2(10)
);
/
create or replace type color_type as table of color_hex_code;
/
create or replace function f_pipeline_test return color_type pipelined as
begin
pipe row(color_hex_code('black','#000000'));
pipe row(color_hex_code('red','#ff0000'));
pipe row(color_hex_code('green','#00ff00'));
pipe row(color_hex_code('blue','#0000ff'));
pipe row(color_hex_code('white','#ffffff'));
return;
end;
/ SQL> select * from table(f_pipeline_test); COLOR_NAME COLOR_CODE
---------- ----------
black #000000
red #ff0000
green #00ff00
blue #0000ff
white #ffffff
3.传址函数的几种类型
create or replace function adding
(a in number,b in out number)
return number is
begin
b :=b+1;
return a+b;
end;
/
variable one number;
/
variable two number;
/
begin
:one :=1;
:two :=0;
end;
/
variable output number;
/
call adding(:one,:two) into :output;
/
call adding(:one,:two) into :output;
/ select :one, :two from dual; :ONE :TWO
---------- ----------
1 4
4.使用rollup对分组数据进行汇总
select deptno,sum(sal) from emp where deptno is not null
group by rollup(deptno); DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
29025
5.使用cube对分组内每一组的数据和总数据同时汇总,同时包含对不同分组依据进行汇总
select deptno,job,sum(sal) from emp where deptno is not null
group by cube(deptno,job)
order by deptno,job; DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 8750
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
20 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
29025 18 rows selected.
6.使用grouping sets 只显示汇总,不列出原始分组数据
SELECT deptno,job,SUM(sal)
FROM emp
WHERE deptno IS NOT NULL
GROUP BY GROUPING SETS(deptno,job)
ORDER BY deptno,job; DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 8750
20 10875
30 9400
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
7.grouping_id函数可以用来标记汇总数据的行,比如第一个维度的汇总用1表示,第二个维度的汇总用2表示,两个维度的所以汇总用3表示。因此可以过滤未汇总的行。
ELECT deptno,job,
GROUPING_ID(deptno,job),SUM(sal)
FROM emp
WHERE deptno IS NOT NULL
GROUP BY CUBE(deptno,job)
HAVING GROUPING_ID(deptno,job) > 0
ORDER BY deptno,job; DEPTNO JOB GROUPING_ID(DEPTNO,JOB) SUM(SAL)
---------- --------- ----------------------- ----------
10 1 8750
20 1 10875
30 1 9400
ANALYST 2 6000
CLERK 2 4150
MANAGER 2 8275
PRESIDENT 2 5000
SALESMAN 2 5600
3 29025
8.利用子查询克隆表结构
CREATE TABLE emp2
AS
SELECT *
FROM scott.emp
WHERE 1=2; SQL> SELECT * FROM emp2; no rows selected
9.用户查看自身表的使用情况(user_extents)
SELECT segment_name,segment_type,
tablespace_name,
bytes/1024/1024 "size",
blocks from user_extents; SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME size BLOCKS
-------------------- ------------------ ------------------------------ ---------- ----------
ORDERS TABLE USERS .0625 8
EMP TABLE USERS .0625 8
EMP2 TABLE USERS .0625 8
10.用户查看自身表的使用情况(user_segments)
SELECT segment_name,segment_type,tablespace_name,
bytes/1024/1024 byt,buffer_pool
FROM user_segments; SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BYT BUFFER_
---------------------------------------- ------------------ ------------------- ---------- -------
EMP2 TABLE USERS .0625 DEFAULT
EMP TABLE USERS .0625 DEFAULT
ORDERS TABLE USERS .0625 DEFAULT
BIN$iZfhhmba19rgQKjAZQETvA==$0 TABLE USERS .0625 DEFAULT
BIN$iZfhhmbZ19rgQKjAZQETvA==$0 TABLE USERS .0625 DEFAULT
BIN$iZfhhmbY19rgQKjAZQETvA==$0 TABLE USERS .0625 DEFAULT
pl sql练习(2)的更多相关文章
- Oracle PL/SQL随堂笔记总结
1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle的p ...
- Oracle学习笔记十 使用PL/SQL
PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...
- PL/SQL连接错误:ora-12705:cannot access NLS data files or invalid environment specified
适合自己的解决方法: 排查问题: 1. 你没有安装Oracle Client软件.这是使用PL/SQL Developer的必须条件.安装Oracle Client后再重试.2. 你安装了多个Orac ...
- PL/SQL循环
1.if循环做判断 SET SERVEROUTPUT ON accept num prompt 'qinshuu'; DECLARE pnum NUMBER :=& num ; BEGIN T ...
- PL/SQL存储过程编程
PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...
- PL/SQL连接Oracle数据库,中文乱码,显示问号
问题描述: 登陆PL/SQL,执行SQL语句后,输出的中文标题显示成问号????:条件包含中文,则无数据. 如果不是中文,需要修改注册表值,方法如下: 进入注册表:Win+r,输入re ...
- PL/SQL客户端中执行insert语句,插入中文乱码
问题描述:在PL/SQL客户端中执行insert语句,插入中文乱码 解决方案: 1.执行脚本 select userenv('language') from dual; 结果为AMERICAN_ ...
- PL/SQL Developer如何连接64位的Oracle图解
在64位Win7系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时就不能使用PL/SQL Developer来进行直接连接的,所以要想实现连接还得需要其他 ...
- 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...
- pl/sql里的exists和in的差别
项目中有个需要需要如下pl/sql(数据库是MariaDB) ) AS small FROM cmp_ent_main a WHERE createTime<'2016-9-21' ,,) ) ...
随机推荐
- 检测 HTML5\CSS3\JAVASCRIPT 在浏览器的适应情况
CSS3 Selectors Test : 这是CSS3.INFO网站提供的css选择器测试页面,它能够详细显示当前浏览器对所有CSS3选择器的支持情况.启动测试,浏览器会自动测验,并已列表的方式显示 ...
- FullCalendar 的学习笔记(一)
前一段时间,一个老项目需要新增一个小功能,日程表~ 于是网上找了下,发现FullCalendar这个控件还不错于是就拿来用了下,下面简单介绍下我的学习笔记. 首先就是了解下FullCalendar的A ...
- ASP.NET中多个相同name的控件在后台正确取值
有兽, 页面上可能有多个相同name的Html表单控件, 一般在后台使用Request.Form[“name”]取值,并用‘,’分隔. 但是当值中包含逗号时, 取值就会出现异常, ...
- linux 下执行.sh文件总是提示permission denied
linux 下执行.sh文件总是提示permission denied 如果你是root登陆的话(不是的话,切换到root用户,对*.sh赋可执行的权限) chmod 777 *.sh or ch ...
- struts1:(Struts)ActionForm类及表单数据验证
在Struts的中央控制器中写了Struts的控制器角色,在这篇介绍下Struts的视图!Struts的视图组件:Struts框架中的视图组件主要包括:JSP页面.ActionForm类.Struts ...
- 解决IE11只能用管理员身份运行的问题
解决IE11只能用管理员身份运行的问题 IE11 打不开,必须要用管理员身份运行才可以打开,而且重置浏览器这个方法也不奏效. 今天本人也遇到了,上网查找发现是注册表权限的问题,原因尚不明确,安装了或被 ...
- jQuery Moblile Demos学习记录Theming、Button、Icons图标,脑子真的不好使。
jQuery Moblile Demos学习记录Theming.Button.Icons图标,脑子真的不好使. 06. 二 / Jquery Mobile 前端 / 没有评论 本文来源于www.i ...
- WPF/MVVM 快速开发
http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial 这篇文章醍醐灌顶,入门良药啊! Introductio ...
- java类中的static成员变量和static方法简单介绍,持续补充
一.静态成员变量 1.属于整个类而不是某个对象实例,所以可以直接通过类名和对象名去调用. 2.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收 二.静态方 ...
- checkbox选中问题
<head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...