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

  

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

  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.

  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 :=''||
  12. when random=7 then ''||lpad(floor(abs(trunc(dbms_random.value(1,31)))),2,'')
  13. end);
  14. insert into recordfile values(''||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;

  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. /

  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. /

  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. CREATE OR REPLACE TRIGGER tri_emp_sal
  14. AFTER INSERT ON EMP
  15. FOR EACH ROW
  16. BEGIN
  17. IF :NEW.SAL<1500
  18. THEN
  19. UPDATE DEPT_SAL
  20. SET LOWNUM=LOWNUM+1
  21. WHERE deptno=:NEW.deptno;
  22. ELSIF :NEW.SAL>3000
  23. THEN
  24. UPDATE DEPT_SAL
  25. SET HIGHNUM=HIGHNUM+1
  26. WHERE deptno=:NEW.deptno;
  27. END IF;
  28. END;
  29. /
  30.  
  31. 测试代码:
  32. INSERT INTO EMP VALUES(7841,'JOHN','CLERK',7698,'12-dec-87',1000,0,20);
  33. INSERT INTO EMP VALUES(7912,'LILEI','ANALYST',7839,'05-apr-82',3500,0,10);

  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

pl sql练习(3)的更多相关文章

  1. Oracle PL/SQL随堂笔记总结

    1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle的p ...

  2. Oracle学习笔记十 使用PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  3. PL/SQL连接错误:ora-12705:cannot access NLS data files or invalid environment specified

    适合自己的解决方法: 排查问题: 1. 你没有安装Oracle Client软件.这是使用PL/SQL Developer的必须条件.安装Oracle Client后再重试.2. 你安装了多个Orac ...

  4. PL/SQL循环

    1.if循环做判断 SET SERVEROUTPUT ON accept num prompt 'qinshuu'; DECLARE pnum NUMBER :=& num ; BEGIN T ...

  5. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  6. PL/SQL连接Oracle数据库,中文乱码,显示问号

    问题描述: 登陆PL/SQL,执行SQL语句后,输出的中文标题显示成问号????:条件包含中文,则无数据.         如果不是中文,需要修改注册表值,方法如下: 进入注册表:Win+r,输入re ...

  7. PL/SQL客户端中执行insert语句,插入中文乱码

    问题描述:在PL/SQL客户端中执行insert语句,插入中文乱码 解决方案: 1.执行脚本 select userenv('language') from dual;    结果为AMERICAN_ ...

  8. PL/SQL Developer如何连接64位的Oracle图解

    在64位Win7系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时就不能使用PL/SQL Developer来进行直接连接的,所以要想实现连接还得需要其他 ...

  9. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  10. pl/sql里的exists和in的差别

    项目中有个需要需要如下pl/sql(数据库是MariaDB) ) AS small FROM cmp_ent_main a WHERE createTime<'2016-9-21' ,,) ) ...

随机推荐

  1. oracle行号排序问题

    1.创建一个student,并且插入数据 ),age int) '); '); '); '); '); commit; 2.直接按照age进行排序显示行号: select * from(select ...

  2. iOS 面试基础题

    1.UIWindow和UIView和 CALayer 的联系和区别? 答:UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以在屏幕上响应 ...

  3. iOS 实现毛玻璃效果

    话说苹果在iOS7.0之后,很多系统界面都使用了毛玻璃效果,增加了界面的美观性,比如下图的通知中心界面; 但是其iOS7.0的SDK并没有提供给开发者实现毛玻璃效果的API,所以很多人都是通过一些别人 ...

  4. yii2 访问控制

    class SiteController extends Controller{ /** * @inheritdoc */ public function behaviors() { return [ ...

  5. js 事件小结

    1,事件对象   e || window.event //ie   2, 取鼠标点击坐标 带有滚动条的   var top = document.documentElement.scrollTop | ...

  6. javascript事件捕获与冒泡

    对“捕获”和“冒泡”这两个概念,我想我们对冒泡更熟悉一些,因为在我们使用的所有浏览器中,都支持事件冒泡,即事件由子元素向祖先元素传播的,就 像气泡从水底向水面上浮一样.而在像firefox,chrom ...

  7. Json对象在JS里面的处理

    1.遍历Json对象 myJson = {"name":"nikita", "password":"1111"}; fo ...

  8. 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服务,重新访问页面,问题解决了.

  9. ZendFramework 两种安装方式

    1. 在线安装(基于composer) Zend 应用程序骨架 GitHub 地址: https://github.com/zendframework/ZendSkeletonApplication ...

  10. Python学习笔记四,dict和set

    dict是字典dictionary的缩写,他存放的是键值对key/value,用花括号表示,格式为d={'micheal':99,'jack':88} 当我们访问的时候直接print(d['miche ...