pl sql练习(3)
1.s树形结构查询表中的数据:比如emp表中每个员工都有自己的头,即公司中的职位是按层次划分的,类似一个树,因此有时需要按层次显示查询的结果。
- select empno,mgr,ename,job from emp
- start with empno = 7839
- connect by prior empno = mgr;
- EMPNO MGR ENAME JOB
- ---------- ---------- ---------- ---------
- 7839 KING PRESIDENT
- 7566 7839 JONES MANAGER
- 7788 7566 SCOTT ANALYST
- 7876 7788 ADAMS CLERK
- 7902 7566 FORD ANALYST
- 7369 7902 SMITH CLERK
- 7698 7839 BLAKE MANAGER
- 7499 7698 ALLEN SALESMAN
- 7521 7698 WARD SALESMAN
- 7654 7698 MARTIN SALESMAN
- 7844 7698 TURNER SALESMAN
- EMPNO MGR ENAME JOB
- ---------- ---------- ---------- ---------
- 7900 7698 JAMES CLERK
- 7782 7839 CLARK MANAGER
- 7934 7782 MILLER CLERK
- 14 rows selected.
2.使用level显示数据所在的层并格式化数据。
- select level,
- lpad(' ',2 * level - 1) || ename as "Ename",
- job
- from emp
- start with ename = 'KING'
- connect by prior empno = mgr;
- LEVEL Ename JOB
- ---------- ------------------------------ ---------
- 1 KING PRESIDENT
- 2 JONES MANAGER
- 3 SCOTT ANALYST
- 4 ADAMS CLERK
- 3 FORD ANALYST
- 4 SMITH CLERK
- 2 BLAKE MANAGER
- 3 ALLEN SALESMAN
- 3 WARD SALESMAN
- 3 MARTIN SALESMAN
- 3 TURNER SALESMAN
- LEVEL Ename JOB
- ---------- ------------------------------ ---------
- 3 JAMES CLERK
- 2 CLARK MANAGER
- 3 MILLER CLERK
- 14 rows selected.
3.写一个存储过程,向表中随机插入1000条记录
SerialNo:使用序列方式,自增长。
Filepath:使用随机插入6个字母
Partid: 使用随机4位数字
StaffNo:从YTCZ060001……. YTCZ060020 中随机抽取
RecordTime:从2011年8月1日之前的6个月中随机抽取。
- create or replace procedure p_random_corder
- is
- MAXCORDERS constant int :=1000;
- i int :=2;
- day varchar2(100);
- random int;
- begin
- for i in 2..MAXCORDERS loop
- random :=trunc(dbms_random.value(2,8));
- day :=''||
- when random=7 then ''||lpad(floor(abs(trunc(dbms_random.value(1,31)))),2,'')
- end);
- insert into recordfile values(''||seq_class.nextval,
- upper(chr(trunc(dbms_random.value(97,122))))||
- upper(chr(trunc(dbms_random.value(97,122))))||
- upper(chr(trunc(dbms_random.value(97,122))))||
- upper(chr(trunc(dbms_random.value(97,122))))||
- upper(chr(trunc(dbms_random.value(97,122))))||
- upper(chr(trunc(dbms_random.value(97,122)))),
- trunc(dbms_random.value(1000,9999)),
- 'YTCZ0'||trunc(dbms_random.value(60001,60020)),
- to_date(day,'yyyymmdd'));
- end loop;
- dbms_output.put_line('sucess');
- commit;
- end;
4.写一个存储过程,删除3个月前的数据
- create or replace procedure p_delete_threedata
- is
- begin
- delete from recordfile where RecordTime = trunc(add_months(sysdate,-3));
- commit;
- exception
- when others then
- rollback;
- end ;
- /
5.写一个job,每隔30天凌晨2点整,系统执行“删除3个月前数据”的存储过程。
- DECLARE
- JobNum NUMBER(5) := 0;
- JobID NUMBER(5);
- BEGIN
- SELECT COUNT(*) INTO JobNum FROM DBA_JOBS WHERE UPPER(SUBSTRB(WHAT,1,30)) = UPPER('p_delete_threedata');
- IF JobNum > 0 THEN
- SELECT NVL(JOB,0) INTO JobID FROM DBA_JOBS WHERE UPPER(SUBSTRB(WHAT,1,30)) = UPPER('p_delete_threedata');
- IF JobID > 0 THEN
- DBMS_JOB.REMOVE(JobID);
- END IF;
- END IF;
- DBMS_JOB.SUBMIT(JobID, 'p_delete_threedata;', trunc(sysdate,'DD')+1+2/24, 'sysdate+30');
- COMMIT;
- END;
- /
6.创建一个触发器tri_emp_sal,要求当向员工表emp中插入记录时,同时更新部门工资统计表(dept_sal)中相应字段的值:如果插入的工资低于1500,则低收入人数(lownum)加1;如果插入的工资高于3000,则高收入人数(highnum)加1。
- 先执行下列语句创建dept_sal表并向表中插入实验数据:
- CREATE TABLE dept_sal
- (deptno number(2),
- lownum number(4),
- highnum number(4));
- insert into dept_sal
- values(10,1,1);
- insert into dept_sal
- values(20,1,3);
- insert into dept_sal
- values(30,1,1);
- CREATE OR REPLACE TRIGGER tri_emp_sal
- AFTER INSERT ON EMP
- FOR EACH ROW
- BEGIN
- IF :NEW.SAL<1500
- THEN
- UPDATE DEPT_SAL
- SET LOWNUM=LOWNUM+1
- WHERE deptno=:NEW.deptno;
- ELSIF :NEW.SAL>3000
- THEN
- UPDATE DEPT_SAL
- SET HIGHNUM=HIGHNUM+1
- WHERE deptno=:NEW.deptno;
- END IF;
- END;
- /
- 测试代码:
- INSERT INTO EMP VALUES(7841,'JOHN','CLERK',7698,'12-dec-87',1000,0,20);
- INSERT INTO EMP VALUES(7912,'LILEI','ANALYST',7839,'05-apr-82',3500,0,10);
7.变量作用域
- declare
- v_num number(5,2):=1.23;
- begin
- declare v_num char(10);
- begin
- v_num:=12345;
- dbms_output.put_line(v_num);
- end;
- dbms_output.put_line(v_num);
- end;
- /
- 首先会输出12345
- 然后输出1.23
pl sql练习(3)的更多相关文章
- 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' ,,) ) ...
随机推荐
- oracle行号排序问题
1.创建一个student,并且插入数据 ),age int) '); '); '); '); '); commit; 2.直接按照age进行排序显示行号: select * from(select ...
- iOS 面试基础题
1.UIWindow和UIView和 CALayer 的联系和区别? 答:UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以在屏幕上响应 ...
- iOS 实现毛玻璃效果
话说苹果在iOS7.0之后,很多系统界面都使用了毛玻璃效果,增加了界面的美观性,比如下图的通知中心界面; 但是其iOS7.0的SDK并没有提供给开发者实现毛玻璃效果的API,所以很多人都是通过一些别人 ...
- yii2 访问控制
class SiteController extends Controller{ /** * @inheritdoc */ public function behaviors() { return [ ...
- js 事件小结
1,事件对象 e || window.event //ie 2, 取鼠标点击坐标 带有滚动条的 var top = document.documentElement.scrollTop | ...
- javascript事件捕获与冒泡
对“捕获”和“冒泡”这两个概念,我想我们对冒泡更熟悉一些,因为在我们使用的所有浏览器中,都支持事件冒泡,即事件由子元素向祖先元素传播的,就 像气泡从水底向水面上浮一样.而在像firefox,chrom ...
- Json对象在JS里面的处理
1.遍历Json对象 myJson = {"name":"nikita", "password":"1111"}; fo ...
- Fatal error: Undefined class constant 'MYSQL_ATTR_USE_BUFFERED_QUERY' in D:\inetpub\vhosts\zenpty.com\httpdocs\includes\database
打开php.ini配置文件,找到php_pdo_mysql.dll,如果前面有分号";"则表示该行被注释掉了,将分号去掉,保存,然后重启apache服务,重新访问页面,问题解决了.
- ZendFramework 两种安装方式
1. 在线安装(基于composer) Zend 应用程序骨架 GitHub 地址: https://github.com/zendframework/ZendSkeletonApplication ...
- Python学习笔记四,dict和set
dict是字典dictionary的缩写,他存放的是键值对key/value,用花括号表示,格式为d={'micheal':99,'jack':88} 当我们访问的时候直接print(d['miche ...