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' ,,) ) ...
随机推荐
- 文本框脚本 - select 事件
HTML中,用两种方式来表示文本框: input 单行文本.textarea 多行文本 那么在文本中存在哪些事件尼? 1 select 都支持 但是其触发的时机不一样 IE9+ .Safair ...
- 失效的URL访问限制(转)
* 经常URL的保护仅仅是连接到该页面的链接不出现在未授权的用户面前.然而,一个有动机的.熟练的或者仅仅是幸运的黑客可能会找到并访问这些网页 , 调用这些功能并查看数据.在应用程序中,通过隐匿来实现安 ...
- Repeater数据绑定和操作
Repeater使用详细指南 ASP.NET WebForm开发中尽量少用系统提供的runat="server"的服务器控件,尤其像GridView之类的“重量级”武器,自动生成的 ...
- C++服务器设计(七):聊天系统服务端实现
在之前的章节中,我们对服务端系统的设计实现原理进行了剖析,在这一章中,我们将对服务端框架进行实际运用,实现一款运行于内网环境的聊天系统.该聊天系统由客户端与服务器两部分组成,同时服务端通过数据库维护用 ...
- 添加jar
file->project structure->'+'添加jar 在.gradle中配置
- MySQL 常用字段类型,介绍及其建表使用方法经验分享
由于工作的公司没有专业的DBA又经常需要建立各种各种的表来满足自己的业务逻辑,所以经常查看MySQL 手册或者谷歌查看相关资料,所以本人就根据我的工作经验和相关资料来介绍一下MySQL各种字段类型及其 ...
- select2使用详解
官网: https://select2.github.io/examples.html 引用: <link href="~/Scripts/select2/select2.css&qu ...
- ActionSupport.getText()方法 以及 js中:<s:text name="" />
下面略述com.opensymphony.xwork2.ActionSupport.getText()方法 public String getText(String aTextName) 说明:Get ...
- instancetype和id的区别
一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以 ...
- jQuery中$符号冲突问题 (转载)
Jquery的$命名冲突: 在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg') 的写法.然而,当我们引入多 ...