PL/SQL语言基础
PL/SQL语言基础
进行PL/SQL编程前,要打开输出set serveroutput on
1、创建一个匿名PL/SQL块,将下列字符输出到屏幕:“My PL/SQL Block Works”. 声明一个暂存员工号的变量v_empno,编写一个匿名块,查询smith员工的工号并输出显示。
2、编写一个PL/SQL块,输出所有员工的姓名、员工号、工资和部门号。
3、编写一个PL/SQL块,输出所有比本部门平均工资高的员工信息。
4、编写一个PL/SQL块,输出所有员工及其部门领导的姓名、员工号及部门号。
5、查询名为“Smith”的员工信息,并输出其员工号、姓名、工资、部门号。如果该员工不存在,则插入一条新记录,员工号为2010,员工名为“Smith”,工资为7500元,EMAIL为smith@sau.edu.cn,入职日期为“2018年10月10日”,职位编号为AD_VP,部门号为50。如果存在多个名为“Smith”的员工,则输出所有名为“Smith”的员工号、姓名、工资、入职日期、部门号、email。
6、编写一个PL/SQL块,根据员工职位不同更新员工的工资。职位为AD_PRES、AD_VP、AD_ASST的员工工资增加1000元,职位为FI_MG,FI_ACCOUNT的员工工资增加800元,职位为AC_MGR,AC_ACCOUNT的员工工资增加700元,职位为SA_MAN,SA_REP的员工工资增加600元,职位为PU_MAN,PU_CLERK的员工工资增加500元,职位为ST_MAN,ST_CLERK,SH_CLERK的员工工资增加400元,职位为IT_PROG,MK_MAN,MK_REP的员工工资增加300元,其他职位的员工工资增加200元。
7、编写一个PL/SQL块,修改员工号为201的员工工资为8000元,保证修改后的工资在职位允许的工资范围之内,否则取消操作,并说明原因。
参考代码
DECLARE
CURSOR c_emp IS SELECT * FROM employees
where last_name='Smith';
v_empno c_emp%ROWTYPE;
BEGIN
OPEN c_emp;
DBMS_OUTPUT.PUT_LINE('My PL/SQL Block Works');
LOOP
FETCH c_emp INTO v_empno;
EXIT WHEN c_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('the ID of simth is '||v_empno.employee_id);
END LOOP;
CLOSE c_emp;
END;
/
DECLARE
CURSOR c_emp IS SELECT * FROM employees;
v_empno c_emp%ROWTYPE;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO v_empno;
EXIT WHEN c_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_empno.first_name||' '||v_empno.last_name||' ID:'||v_empno.employee_id
||' salary:'||v_empno.salary );
END LOOP;
CLOSE c_emp;
END;
/
DECLARE
CURSOR c_emp IS SELECT * FROM employees where salary>(select AVG(salary) FROM employees);
v_empno c_emp%ROWTYPE;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO v_empno;
EXIT WHEN c_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_empno.first_name||' '||v_empno.last_name||' ID:'||v_empno.employee_id
||' salary:'||v_empno.salary );
END LOOP;
CLOSE c_emp;
END;
/
DECLARE
CURSOR c_emp IS SELECT a.first_name,a.last_name,
a.employee_id,a.department_id,
b.first_name mfirst_name,b.last_name mlast_name
FROM employees a inner join employees b
on a.employee_id=b.manager_id;
v_emp c_emp%ROWTYPE;
BEGIN
FOR v_emp IN c_emp LOOP
DBMS_OUTPUT.PUT_LINE(v_emp.first_name||' '||
v_emp.last_name||' '||v_emp.employee_id||' '||
v_emp.mfirst_name||' '||v_emp.mlast_name||' '||
v_emp.department_id);
END LOOP;
END;
/
DECLARE
v_emp employees%ROWTYPE;
BEGIN
SELECT * INTO v_emp FROM employees WHERE last_name='Smith';
DBMS_OUTPUT.PUT_LINE(v_emp.employee_id||' '||v_emp.first_name||' '||
v_emp.last_name||' '||v_emp.salary||' '||v_emp.department_id);
EXCEPTION
WHEN no_data_found THEN
INSERT INTO employees(employee_id,last_name,salary,
email,hire_date,job_id,department_id) VALUES
(2010,'Smith',7500,'smith@sau.edu.cn','10-10月 -2018','AD_VP',50);
WHEN too_many_rows THEN
FOR v_emp IN (SELECT * FROM employees WHERE last_name='Smith')LOOP
DBMS_OUTPUT.PUT_LINE(v_emp.employee_id||' '||v_emp.first_name||' '||
v_emp.last_name||' '||v_emp.salary||' '||v_emp.department_id);
END LOOP;
END;
/
DECLARE
v_sal employees.salary%TYPE;
BEGIN
FOR v_emp IN (SELECT * FROM employees) LOOP
IF v_emp.job_id='AD_PRES' OR v_emp.job_id='AD_VP' OR v_emp.job_id='AD_ASST'
THEN v_sal:=1000;
ELSIF v_emp.job_id='AD_MGR' OR v_emp.job_id='AD_ACCOUNT'
THEN v_sal:=800;
ELSIF v_emp.job_id='SA_MAN' OR v_emp.job_id='SA_REP'
THEN v_sal:=600;
ELSIF v_emp.job_id='PU_MAN' OR v_emp.job_id='PU_CLERK'
THEN v_sal:=500;
ELSIF v_emp.job_id='ST_MAN' OR v_emp.job_id='ST_CLERK' OR v_emp.job_id='SH_CLERK'
THEN v_sal:=400;
ELSIF v_emp.job_id='IT_PROG' OR v_emp.job_id='MK_MAN' OR v_emp.job_id='MK_REP'
THEN v_sal:=300;
ELSE v_sal:=200;
END IF;
UPDATE employees SET salary=v_emp.salary+v_sal WHERE employee_id=v_emp.employee_id;
END LOOP;
END;
/
DECLARE
v_salmin employees.salary%TYPE;
v_salmax employees.salary%TYPE;
v_sal employees.salary%TYPE;
e_highlimit EXCEPTION;
e_lowlimit EXCEPTION;
BEGIN
SELECT MAX(salary) INTO v_salmax FROM employees;
SELECT MIN(salary) INTO v_salmin FROM employees;
SELECT salary INTO v_sal FROM employees WHERE employee_id=201 ;
UPDATE employees SET salary=8000 WHERE employee_id=201;
IF v_sal>v_salmax THEN
RAISE e_highlimit;
ELSIF v_sal<v_salmin THEN
RAISE e_lowlimit;
END IF;
EXCEPTION
WHEN e_highlimit THEN
DBMS_OUTPUT.PUT_LINE('The salary is too large');
WHEN e_lowlimit THEN
DBMS_OUTPUT.PUT_LINE('The salary is too little');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('There is some wrong in selecting!');
END;
/
PL/SQL语言基础的更多相关文章
- 浅谈PL/SQL语言基础
在前面的学习中,我们大部分接触的都是SQL语言,但是,在实现复杂操作的时候,SQL语言就无能为力了,这时候就需要引入新的语言,PL/SQL语言就是对SQL语言的扩展,可以实现存储过程,函数等的创建.下 ...
- Oracle Pl/SQL编程基础
Pl/SQL简介 提高应用程序的运行性能, 提供模块化的程序设计, 自定义标示符, 具有过程语言控制结构, 良好的兼容性, 处理运行错误. Pl/SQL语言基础 sql是关系数据库的基本操作语言. s ...
- 【PL/SQL编程基础】
[PL/SQL编程基础]语法: declare 声明部分,例如定义变量.常量.游标 begin 程序编写,SQL语句 exception 处理异常 end: / 正斜杠表示执行程序快范例 -- Cre ...
- PL/SQL语言的学习笔记
一.PL/SQL简介1.什么是PL/SQL程序?(PL/SQL是对SQL语言的一个扩展,从而形成的一个语言) 2.PL/SQL语言的特点(操作Orcale数据库效率最高的就是PL/SQL语言,而不是C ...
- Oracle数据库编程:PL/SQL编程基础
2.PL/SQL编程基础: PL/SQL块: declare 定义部分 begin 执行部分 exception 异 ...
- oracle PL/SQL语法基础
目录 数据类型 定义变量 PL/SQL控制结构 参考资料 Oracle10g数据类型总结 PL/SQL之基础篇 数据类型 学习总结 字符类型 char.nchar.varchar.nvarchar:有 ...
- Oracle 的PL/SQL语言使用
--PL/SQL语言(procedure language 过程化语言) --1.声明类型 declare k number; m ; --Character String buffer too sm ...
- PL/SQL 之 基础
PL/SQL(Procedural Language extensions to SQL)是Oracle 对标准 SQL 语言的过程化扩展,是专门用于各种环境下对 Oracle 数据库进行访问和开发的 ...
- Oracle PL/SQL 语言(Procedural Language/SQL)
Oracle PL/SQL 语言(Procedural Language/SQL)是结合了结构化查询与 Oracle 自身过程控制为一体的强大语言,PL/SQL 不但支持更多的数据类型,拥有自身的变量 ...
随机推荐
- 网络安全 - SSL/TLS协议运行机制的概述
大学时也系统学过相关的网络安全,但那时并没有理论联系实践,稀里糊涂的,现在才意识到所学的东西都是好东西,可惜已晚. 来自http://www.ruanyifeng.com/blog/2014/02/s ...
- 【机器学习的Tricks】随机权值平均优化器swa与pseudo-label伪标签
文章来自公众号[机器学习炼丹术] 1 stochastic weight averaging(swa) 随机权值平均 这是一种全新的优化器,目前常见的有SGB,ADAM, [概述]:这是一种通过梯度下 ...
- 一些html基础概念
不做前端好多年,之所以突然写这个,是因为最近在做一个监控平台,需要一点web前端开发,想着顺便做了,但是由于长时间没接触前端导致一些基础知识的遗忘,所以在此记录下备忘,没有啥高深的东西,完全是为了对抗 ...
- zabbix监控配置一般流程
目录 zabbix监控配置流程 1. 配置客户端 2. 配置监控 2.1 创建主机组 2.2 添加主机并加入主机组 2.3 添加监控项 2.3.1 模板的方式(不用添加触发器) 2.3.2 手动添加的 ...
- JAVA设计模式 5【结构型】代理模式的理解与使用
今天要开始我们结构型 设计模式的学习,设计模式源于生活,还是希望能通过生活中的一些小栗子去理解学习它,而不是为了学习而学习这些东西. 结构型设计模式 结构型设计模式又分为 类 结构型 对象 结构型 前 ...
- 一文打尽Java抽象类和接口的相关问题
相关文章: <面向对象再探究>:介绍了面向对象的基本概念 <详解Java的对象创建>:介绍了对象的创建.构造器的使用 <一文打尽Java继承的相关问题>:介绍了继承 ...
- MyFirstJavaWeb
源代码: Register.jsp <%@ page language="java" contentType="text/html; charset=utf-8&q ...
- 我给这个Python库打101分!
日志在开发过程中是一种被很多程序员 不重视 ,但是却 至关重要 的一项功能. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案 ...
- 曲线生成与求交—B样条曲线
B样条曲线生成 Bezier曲线缺点:改变任一控制点的位置,将影响整条曲线的形状. B样条曲线是对Bezier曲线的改进,可进行局部控制,生成的曲线与控制多边形的外形更接近,将Bezier曲线作为一特 ...
- Python安装工具
1.官网下载地址是:https://www.python.org/downloads/ 默认下载安装时记得勾选配置PATH路径 PIP工具包(我是选择Python 3.5的) 2.Windows 下 ...