博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pl sql练习(2)
阅读量:4670 次
发布时间:2019-06-09

本文共 6665 字,大约阅读时间需要 22 分钟。

  1.尽可能了解oracle的功能,因为很多业务逻辑oracle已经为我们做了,比如oracle已经预定义了大量的异常代码,我们不必要写自己的异常而增加代码的复杂度。

例如oracle定义了当找不到符合要求的数据时定义的异常:no_data_found,而很多开发人员经常使用自己的逻辑去判断是否找到数据。

1 declare 2   ln_deptno number; 3   ln_tempno number:=1; 4 begin 5   select deptno into ln_deptno 6   from scott.dept 7   where deptno=ln_tempno; 8   dbms_output.put_line(ln_deptno); 9 exception10   when no_data_found then11   dbms_output.put_line('No deptno for: '||ln_tempno);12 end;13 /14 15 16 SQL> @a.sql;17 No deptno for: 118 19 PL/SQL procedure successfully completed.
View Code

   2.管线表函数,可以把她的返回值作为像数据库表 一样在查询语句中使用。

1 create or replace type color_hex_code as object 2 ( 3   color_name varchar2(10), 4   color_code varchar2(10) 5 ); 6 / 7 create or replace type color_type as table of color_hex_code; 8 / 9 create or replace function f_pipeline_test return color_type pipelined as10 begin11   pipe row(color_hex_code('black','#000000'));12   pipe row(color_hex_code('red','#ff0000'));13   pipe row(color_hex_code('green','#00ff00'));14   pipe row(color_hex_code('blue','#0000ff'));15   pipe row(color_hex_code('white','#ffffff'));16   return;17 end;18 /19 20 21 SQL> select * from table(f_pipeline_test);22 23 COLOR_NAME COLOR_CODE24 ---------- ----------25 black      #00000026 red        #ff000027 green      #00ff0028 blue       #0000ff29 white      #ffffff
View Code

   3.传址函数的几种类型

1 create or replace function adding 2   (a in number,b in out number) 3   return number is 4 begin 5   b :=b+1; 6   return a+b; 7 end; 8 / 9 variable one number;10 /11 variable two number;12 /13 begin14   :one :=1;15   :two :=0;16 end;17 /18 variable output number;19 /20 call adding(:one,:two) into :output;21 /22 call adding(:one,:two) into :output;23 /24 25 26 27 select :one, :two from dual;28 29       :ONE       :TWO30 ---------- ----------31          1          4
View Code

   4.使用rollup对分组数据进行汇总

1 select deptno,sum(sal) from emp where deptno is not null2 group by rollup(deptno);3 4     DEPTNO   SUM(SAL)5 ---------- ----------6         10       87507         20      108758         30       94009                 29025
View Code

   5.使用cube对分组内每一组的数据和总数据同时汇总,同时包含对不同分组依据进行汇总

1 select deptno,job,sum(sal) from emp where deptno is not null 2 group by cube(deptno,job) 3 order by deptno,job; 4  5  6    DEPTNO JOB         SUM(SAL) 7 ---------- --------- ---------- 8         10 CLERK           1300 9         10 MANAGER         245010         10 PRESIDENT       500011         10                 875012         20 ANALYST         600013         20 CLERK           190014         20 MANAGER         297515         20                1087516         30 CLERK            95017         30 MANAGER         285018         30 SALESMAN        560019         30                 940020            ANALYST         600021            CLERK           415022            MANAGER         827523            PRESIDENT       500024            SALESMAN        560025                           2902526 27 18 rows selected.
View Code

   6.使用grouping sets 只显示汇总,不列出原始分组数据

1 SELECT deptno,job,SUM(sal) 2         FROM emp 3         WHERE deptno IS NOT NULL 4         GROUP BY GROUPING SETS(deptno,job) 5         ORDER BY deptno,job; 6  7     DEPTNO JOB         SUM(SAL) 8     ---------- --------- ---------- 9            10                 875010            20                1087511            30                 940012               ANALYST         600013               CLERK           415014               MANAGER         827515               PRESIDENT       500016               SALESMAN        5600
View Code

  7.grouping_id函数可以用来标记汇总数据的行,比如第一个维度的汇总用1表示,第二个维度的汇总用2表示,两个维度的所以汇总用3表示。因此可以过滤未汇总的行。

1 ELECT deptno,job,                                                 2           GROUPING_ID(deptno,job),SUM(sal) 3           FROM emp 4          WHERE deptno IS NOT NULL 5          GROUP BY CUBE(deptno,job) 6          HAVING GROUPING_ID(deptno,job) > 0 7          ORDER BY deptno,job; 8   9 10     DEPTNO JOB       GROUPING_ID(DEPTNO,JOB)   SUM(SAL)11     ---------- --------- ----------------------- ----------12            10                                 1       875013            20                                 1      1087514            30                                 1       940015               ANALYST                         2       600016               CLERK                           2       415017               MANAGER                         2       827518               PRESIDENT                       2       500019               SALESMAN                        2       560020                                           3      29025
View Code

   8.利用子查询克隆表结构

1 CREATE TABLE emp2 2                AS 3                SELECT *                         4                FROM scott.emp 5                WHERE 1=2; 6   7             8  9 SQL> SELECT * FROM emp2;10  11            no rows selected   12
View Code

   9.用户查看自身表的使用情况(user_extents)

1  SELECT segment_name,segment_type, 2               tablespace_name, 3               bytes/1024/1024 "size", 4               blocks from user_extents;         5  6  7 SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME                      size     BLOCKS 8        -------------------- ------------------ ------------------------------ ---------- ---------- 9        ORDERS               TABLE              USERS                               .0625          810        EMP                  TABLE              USERS                               .0625          811        EMP2                 TABLE              USERS                               .0625          8  12
View Code

  10.用户查看自身表的使用情况(user_segments)

1 SELECT segment_name,segment_type,tablespace_name, 2              bytes/1024/1024 byt,buffer_pool 3              FROM user_segments; 4  5   SEGMENT_NAME                             SEGMENT_TYPE       TABLESPACE_NAME             BYT BUFFER_ 6        ---------------------------------------- ------------------ ------------------- ---------- ------- 7        EMP2                                     TABLE              USERS                    .0625 DEFAULT 8        EMP                                      TABLE              USERS                    .0625 DEFAULT 9        ORDERS                                   TABLE              USERS                    .0625 DEFAULT10        BIN$iZfhhmba19rgQKjAZQETvA==$0           TABLE              USERS                    .0625 DEFAULT11        BIN$iZfhhmbZ19rgQKjAZQETvA==$0           TABLE              USERS                    .0625 DEFAULT12        BIN$iZfhhmbY19rgQKjAZQETvA==$0           TABLE              USERS                    .0625 DEFAULT13
View Code

 

转载于:https://www.cnblogs.com/charlie-badegg/p/3277251.html

你可能感兴趣的文章
Linux磁盘分区/格式化/挂载目录
查看>>
raspberry pi下使用mp3blaster播放mp3音乐
查看>>
[转]win7 64位下android开发环境的搭建
查看>>
mysql 无法链接, 输入密码失败
查看>>
java中enum类型的使用
查看>>
枚举类型转换成字符串
查看>>
(剑指Offer)面试题46:求1+2+3+....+n
查看>>
连续子数组的最大和(基于动态规划)
查看>>
Word Search
查看>>
三:背包DP
查看>>
Nikto学习点
查看>>
OSi七成模型 tcp/ip网络模型
查看>>
初学python之路-day15
查看>>
Linux内核分析——进程的描述和进程的创建
查看>>
【C++自我精讲】基础系列三 重载
查看>>
企业级docker私有仓库的配置与使用
查看>>
ireport5.6+jasperreport6.3开发(四)--以javabean为基准的报表开发(ireport)
查看>>
Spring面试底层原理的那些问题,你是不是真的懂Spring?
查看>>
Java知识导航总图
查看>>
关于Ajax的实现
查看>>