pl sql练习(3)
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)相关推荐
- PL/SQL Developer(解压版)连接64位的Oracle11g
PL/SQL Developer(解压版)连接64位的Oracle11g 在Windows 64位系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时要用P ...
- oracle pl/sql 程序设计 历史笔记整理
20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...
- PL/SQL ——分页编程
通过PL/SQL编程,编写分页存储过程.代码如下所示: 1 --PL/SQL开发编写分页代码 2 --创建包 3 create or replace package Page as 4 type te ...
- PL/SQL学习笔记-常量变量及数据类型初步
一:常量和变量 开始之前,还是照例做个经典的例子,如下: declare mydate varchar2(16) := 'hellow world'; begindbms_output.put_lin ...
- oracle bl编译,使用 PL/SQL 条件编译
预处理器指令 指令由指令控制标记"$"和普通的 PL/SQL 文本组成.条件编译使用三个指令:选择.查询和错误.特殊的触发器字符"$"代表条件编译指令.选择指令 ...
- PL/SQL集合类型的整理学习
http://log-cd.iteye.com/blog/521177 PL/SQL集合类型是类似于高级语言数组的一种复合数据类型,集合类型包括索引表(PL/SQL表).嵌套表(Nested Tabl ...
- PL/SQL 中Returning Into的用法
ORACLE的DML语句中可以指定RETURNING INTO语句.RETURNING INTO语句的使用在很多情况下可以简化PL/SQL编程,少一次select into语句. DELETE操作:R ...
- PL/SQL三种集合类型的比较
PL/SQL三种集合类型的比较<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...
- Oracle中PL/SQL的循环语句
PL/SQL的三种形式的循环: 1.LOOP(无条件循环): loop statements; end loop; 2.WHILE(有条件循环): while condition loop s ...
- pl/sql中三种游标循环效率对比
pl/sql中三种游标循环效率对比 - Oracle数据库栏目 - 红黑联盟 http://www.2cto.com/database/201307/224636.html 转载于:https://b ...
最新文章
- 2018年摩拜校招嵌入式工程师笔试卷
- Guice:最好用的依赖注入框架
- 长时间运行app,产生anr
- python画平行坐标图_Matplotlib中的平行坐标图
- 电商常用同义词库_【福利】不可错过的电商设计神器,提高工作效率
- Linux下DRBD配置
- A-Deeper-Understanding-of-Spark-Internals(Spark内核深入理解)
- 随想录(设计软件模块的接口)
- JAVA调用NuSoap服务
- Junit介绍与实现
- RobotStudio软件:ABB机器人弧焊焊接起始点接触寻位虚拟仿真方法
- 停车场管理系统php设计,停车场管理系统设计源代码
- 刚刚!霍金向北京喊话:人类需要大胆前行,涉足无前人所及之处
- 电影票业务-字节青训营
- Rockchip 休眠唤醒 开发指南
- 这篇文章帮你避坑,教会你选购内存卡
- 年化费率和年利率的区别
- 内网穿透远程群晖NAS:使用自定义域名 3/5
- 基于HTML美食餐饮文化项目的设计与实现——吃货部落零食12页
- 特斯拉股价周三开盘上涨近7% 因Q2交付量创纪录缓解了需求担忧