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语言基础的更多相关文章

  1. 浅谈PL/SQL语言基础

    在前面的学习中,我们大部分接触的都是SQL语言,但是,在实现复杂操作的时候,SQL语言就无能为力了,这时候就需要引入新的语言,PL/SQL语言就是对SQL语言的扩展,可以实现存储过程,函数等的创建.下 ...

  2. Oracle Pl/SQL编程基础

    Pl/SQL简介 提高应用程序的运行性能, 提供模块化的程序设计, 自定义标示符, 具有过程语言控制结构, 良好的兼容性, 处理运行错误. Pl/SQL语言基础 sql是关系数据库的基本操作语言. s ...

  3. 【PL/SQL编程基础】

    [PL/SQL编程基础]语法: declare 声明部分,例如定义变量.常量.游标 begin 程序编写,SQL语句 exception 处理异常 end: / 正斜杠表示执行程序快范例 -- Cre ...

  4. PL/SQL语言的学习笔记

    一.PL/SQL简介1.什么是PL/SQL程序?(PL/SQL是对SQL语言的一个扩展,从而形成的一个语言) 2.PL/SQL语言的特点(操作Orcale数据库效率最高的就是PL/SQL语言,而不是C ...

  5. Oracle数据库编程:PL/SQL编程基础

    2.PL/SQL编程基础: PL/SQL块:        declare        定义部分        begin        执行部分        exception        异 ...

  6. oracle PL/SQL语法基础

    目录 数据类型 定义变量 PL/SQL控制结构 参考资料 Oracle10g数据类型总结 PL/SQL之基础篇 数据类型 学习总结 字符类型 char.nchar.varchar.nvarchar:有 ...

  7. Oracle 的PL/SQL语言使用

    --PL/SQL语言(procedure language 过程化语言) --1.声明类型 declare k number; m ; --Character String buffer too sm ...

  8. PL/SQL 之 基础

    PL/SQL(Procedural Language extensions to SQL)是Oracle 对标准 SQL 语言的过程化扩展,是专门用于各种环境下对 Oracle 数据库进行访问和开发的 ...

  9. Oracle PL/SQL 语言(Procedural Language/SQL)

    Oracle PL/SQL 语言(Procedural Language/SQL)是结合了结构化查询与 Oracle 自身过程控制为一体的强大语言,PL/SQL 不但支持更多的数据类型,拥有自身的变量 ...

随机推荐

  1. npm ERR! Unexpected end of JSON input while

    rm -rf node_modules package-lock.json and npm cache clean --force solved it

  2. org.springframework.beans.factory.UnsatisfiedDependencyException异常

    注解配置不完整 如Service实现类没有加 * @Service * @Transactional

  3. TCP 客户端

    """ 创建客户端 绑定服务器ip地址和端口号(端口号是整型) 与服务器建立连接 发送给服务器要发送的数据(转码) 接收服务器返回的数据 关闭客户端 "&quo ...

  4. PHP substr_count() 函数

    实例 计算 "world" 在字符串中出现的次数: <?php高佣联盟 www.cgewang.comecho substr_count("Hello world. ...

  5. fpdf fpdi 操作pdf文件 写入中文汉字

      今天给公司做一个线上合同签约功能,用户签约后 生成pdf版的文件 .网上搜了搜大概都是用fpdf进行操作的  , 通过fpdi 可以进行读取pdf模板. 在通过继承fpdf 操作现有的pdf文档 ...

  6. C++模板沉思录(上)

    花下猫语: 在我们读者群里,最近出现了比较多关于 C++ 的讨论,还兴起了一股学习 C++ 的风气.樱雨楼小姐姐对 C++ 的模板深有研究,系统地梳理成了一篇近 4 万字的文章!本文是上篇,分享给大家 ...

  7. VMware 虚拟机开机黑屏解决方法

    # 调整VMware硬盘启动优先级 第一步:打开电源时进入固件,也就是BIOS 设置界面. 第二步:找到Main-最下面的Boot-time Diagnostic Screen,敲“Enter”,弹出 ...

  8. 【NOIP2015】斗地主 题解(DFS+贪心)

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的AAA到KKK加上大小王的共545454张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下: ...

  9. DataGrip 2020.1 安装与激活

    1 软件下载 百度网盘: 链接:https://pan.baidu.com/s/1kHSq1XS0i4YDF0HuzsxCLg 提取码:djyc 2 安装 解压文件后点击 datagrip-2020. ...

  10. 强大的输入框-应用快速启动uTools

    uTools uTools是一个 极简.插件化.跨平台 的现代桌面软件.通过自由选配丰富的插件,打造你得心应手的工具集合. 当你熟悉它后,能够为你节约大量时间,让你可以更加专注地改变世界. uTool ...