1.s树形结构查询表中的数据:比如emp表中每个员工都有自己的头,即公司中的职位是按层次划分的,类似一个树,因此有时需要按层次显示查询的结果。

  

 1 select empno,mgr,ename,job from emp
 2           start with empno = 7839
 3           connect by prior empno = mgr;
 4
 5
 6         EMPNO        MGR ENAME      JOB
 7     ---------- ---------- ---------- ---------
 8          7839            KING       PRESIDENT
 9          7566       7839 JONES      MANAGER
10          7788       7566 SCOTT      ANALYST
11          7876       7788 ADAMS      CLERK
12          7902       7566 FORD       ANALYST
13          7369       7902 SMITH      CLERK
14          7698       7839 BLAKE      MANAGER
15          7499       7698 ALLEN      SALESMAN
16          7521       7698 WARD       SALESMAN
17          7654       7698 MARTIN     SALESMAN
18          7844       7698 TURNER     SALESMAN
19
20         EMPNO        MGR ENAME      JOB
21     ---------- ---------- ---------- ---------
22          7900       7698 JAMES      CLERK
23          7782       7839 CLARK      MANAGER
24          7934       7782 MILLER     CLERK
25
26     14 rows selected.

View Code

  2.使用level显示数据所在的层并格式化数据。

 1 select level,
 2           lpad(' ',2 * level - 1) || ename as "Ename",
 3           job
 4           from emp
 5           start with ename = 'KING'
 6           connect by prior empno = mgr;
 7
 8         LEVEL Ename                          JOB
 9     ---------- ------------------------------ ---------
10             1  KING                          PRESIDENT
11             2    JONES                       MANAGER
12             3      SCOTT                     ANALYST
13             4        ADAMS                   CLERK
14             3      FORD                      ANALYST
15             4        SMITH                   CLERK
16             2    BLAKE                       MANAGER
17             3      ALLEN                     SALESMAN
18             3      WARD                      SALESMAN
19             3      MARTIN                    SALESMAN
20             3      TURNER                    SALESMAN
21
22         LEVEL Ename                          JOB
23     ---------- ------------------------------ ---------
24             3      JAMES                     CLERK
25             2    CLARK                       MANAGER
26             3      MILLER                    CLERK
27
28     14 rows selected.

View Code

  3.写一个存储过程,向表中随机插入1000条记录
SerialNo:使用序列方式,自增长。
Filepath:使用随机插入6个字母
Partid: 使用随机4位数字
StaffNo:从YTCZ060001……. YTCZ060020 中随机抽取
RecordTime:从2011年8月1日之前的6个月中随机抽取。

 1 create or replace procedure p_random_corder
 2 is
 3   MAXCORDERS constant int :=1000;
 4   i int :=2;
 5   day varchar2(100);
 6   random int;
 7 begin
 8
 9   for i in 2..MAXCORDERS loop
10     random :=trunc(dbms_random.value(2,8));
11     day :='2011'||
12       when  random=7 then '07'||lpad(floor(abs(trunc(dbms_random.value(1,31)))),2,'0')
13      end);
14     insert into recordfile values('2011'||seq_class.nextval,
15     upper(chr(trunc(dbms_random.value(97,122))))||
16     upper(chr(trunc(dbms_random.value(97,122))))||
17     upper(chr(trunc(dbms_random.value(97,122))))||
18     upper(chr(trunc(dbms_random.value(97,122))))||
19     upper(chr(trunc(dbms_random.value(97,122))))||
20     upper(chr(trunc(dbms_random.value(97,122)))),
21     trunc(dbms_random.value(1000,9999)),
22     'YTCZ0'||trunc(dbms_random.value(60001,60020)),
23     to_date(day,'yyyymmdd'));
24   end loop;
25   dbms_output.put_line('sucess');
26   commit;
27 end;

View Code

  4.写一个存储过程,删除3个月前的数据

 1 create or replace procedure p_delete_threedata
 2  is
 3  begin
 4      delete from recordfile where  RecordTime = trunc(add_months(sysdate,-3));
 5      commit;
 6
 7  exception
 8      when others then
 9      rollback;
10  end ;
11 /

View Code

  5.写一个job,每隔30天凌晨2点整,系统执行“删除3个月前数据”的存储过程。

 1 DECLARE
 2         JobNum NUMBER(5) := 0;
 3         JobID  NUMBER(5);
 4 BEGIN
 5   SELECT COUNT(*) INTO JobNum FROM DBA_JOBS WHERE UPPER(SUBSTRB(WHAT,1,30)) = UPPER('p_delete_threedata');
 6   IF JobNum > 0 THEN
 7     SELECT NVL(JOB,0) INTO JobID FROM DBA_JOBS WHERE UPPER(SUBSTRB(WHAT,1,30)) = UPPER('p_delete_threedata');
 8     IF JobID > 0 THEN
 9       DBMS_JOB.REMOVE(JobID);
10     END IF;
11   END IF;
12   DBMS_JOB.SUBMIT(JobID, 'p_delete_threedata;', trunc(sysdate,'DD')+1+2/24, 'sysdate+30');
13   COMMIT;
14 END;
15 /

View Code

  6.创建一个触发器tri_emp_sal,要求当向员工表emp中插入记录时,同时更新部门工资统计表(dept_sal)中相应字段的值:如果插入的工资低于1500,则低收入人数(lownum)加1;如果插入的工资高于3000,则高收入人数(highnum)加1。

 1 先执行下列语句创建dept_sal表并向表中插入实验数据:
 2 CREATE TABLE dept_sal
 3 (deptno number(2),
 4 lownum  number(4),
 5 highnum number(4));
 6 insert into dept_sal
 7 values(10,1,1);
 8 insert into dept_sal
 9 values(20,1,3);
10 insert into dept_sal
11 values(30,1,1);
12
13
14 CREATE OR REPLACE TRIGGER tri_emp_sal
15  AFTER  INSERT  ON EMP
16  FOR  EACH  ROW
17  BEGIN
18  IF :NEW.SAL<1500
19  THEN
20  UPDATE DEPT_SAL
21  SET LOWNUM=LOWNUM+1
22  WHERE deptno=:NEW.deptno;
23  ELSIF :NEW.SAL>3000
24  THEN
25  UPDATE DEPT_SAL
26  SET HIGHNUM=HIGHNUM+1
27  WHERE deptno=:NEW.deptno;
28  END IF;
29  END;
30 /
31
32
33
34
35 测试代码:
36 INSERT INTO EMP VALUES(7841,'JOHN','CLERK',7698,'12-dec-87',1000,0,20);
37 INSERT INTO EMP VALUES(7912,'LILEI','ANALYST',7839,'05-apr-82',3500,0,10);

View Code

  7.变量作用域

 1 declare
 2 v_num number(5,2):=1.23;
 3     begin
 4       declare v_num char(10);
 5       begin
 6          v_num:=12345;
 7          dbms_output.put_line(v_num);
 8       end;
 9     dbms_output.put_line(v_num);
10    end;
11    /
12
13 首先会输出12345
14 然后输出1.23

View Code

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

pl sql练习(3)相关推荐

  1. PL/SQL Developer(解压版)连接64位的Oracle11g

    PL/SQL Developer(解压版)连接64位的Oracle11g 在Windows 64位系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时要用P ...

  2. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  3. PL/SQL ——分页编程

    通过PL/SQL编程,编写分页存储过程.代码如下所示: 1 --PL/SQL开发编写分页代码 2 --创建包 3 create or replace package Page as 4 type te ...

  4. PL/SQL学习笔记-常量变量及数据类型初步

    一:常量和变量 开始之前,还是照例做个经典的例子,如下: declare mydate varchar2(16) := 'hellow world'; begindbms_output.put_lin ...

  5. oracle bl编译,使用 PL/SQL 条件编译

    预处理器指令 指令由指令控制标记"$"和普通的 PL/SQL 文本组成.条件编译使用三个指令:选择.查询和错误.特殊的触发器字符"$"代表条件编译指令.选择指令 ...

  6. PL/SQL集合类型的整理学习

    http://log-cd.iteye.com/blog/521177 PL/SQL集合类型是类似于高级语言数组的一种复合数据类型,集合类型包括索引表(PL/SQL表).嵌套表(Nested Tabl ...

  7. PL/SQL 中Returning Into的用法

    ORACLE的DML语句中可以指定RETURNING INTO语句.RETURNING INTO语句的使用在很多情况下可以简化PL/SQL编程,少一次select into语句. DELETE操作:R ...

  8. PL/SQL三种集合类型的比较

    PL/SQL三种集合类型的比较<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  9. Oracle中PL/SQL的循环语句

    PL/SQL的三种形式的循环: 1.LOOP(无条件循环): loop   statements; end loop; 2.WHILE(有条件循环): while condition loop   s ...

  10. pl/sql中三种游标循环效率对比

    pl/sql中三种游标循环效率对比 - Oracle数据库栏目 - 红黑联盟 http://www.2cto.com/database/201307/224636.html 转载于:https://b ...

最新文章

  1. 2018年摩拜校招嵌入式工程师笔试卷
  2. Guice:最好用的依赖注入框架
  3. 长时间运行app,产生anr
  4. python画平行坐标图_Matplotlib中的平行坐标图
  5. 电商常用同义词库_【福利】不可错过的电商设计神器,提高工作效率
  6. Linux下DRBD配置
  7. A-Deeper-Understanding-of-Spark-Internals(Spark内核深入理解)
  8. 随想录(设计软件模块的接口)
  9. JAVA调用NuSoap服务
  10. Junit介绍与实现
  11. RobotStudio软件:ABB机器人弧焊焊接起始点接触寻位虚拟仿真方法
  12. 停车场管理系统php设计,停车场管理系统设计源代码
  13. 刚刚!霍金向北京喊话:人类需要大胆前行,涉足无前人所及之处
  14. 电影票业务-字节青训营
  15. Rockchip 休眠唤醒 开发指南
  16. 这篇文章帮你避坑,教会你选购内存卡
  17. 年化费率和年利率的区别
  18. 内网穿透远程群晖NAS:使用自定义域名 3/5
  19. 基于HTML美食餐饮文化项目的设计与实现——吃货部落零食12页
  20. 特斯拉股价周三开盘上涨近7% 因Q2交付量创纪录缓解了需求担忧

热门文章

  1. 今天终于安装了Snippet Compiler!!!
  2. C/C++位域知识小结
  3. 公司网络需要内网开发,教你如何使内外网同时访问(windows)
  4. 蓝桥杯 ALGO-117 算法训练 友好数
  5. 【iOS10】使用XCode8、Swift3. 操作SQLite3数据库的步骤(包括配置环境和SQLite语句)
  6. L1-028. 判断素数-PAT团体程序设计天梯赛GPLT
  7. java连接redis集群
  8. Oracle客户端安装以及PL/SQL Developer安装方法
  9. SpringSecurity应用(二)
  10. 我从佛学里悟到的自由