1.打印Hello World

declare
--说明部分
begin
--程序
dbms_output.put_line('Hello World');
end;

2.引用型变量

查询并打印7839的姓名和薪水

declare
--定义变量保存姓名和薪水
--pename varchar2(20);
--psal number; pename emp.ename%type;
psal emp.sal%type;
begin
--得到7839的姓名和薪水
select ename,sal into pename,psal from emp where empno=7839;
--打印
dbms_output.put_line(pename||'的薪水是'||psal);
end;

3.记录型变量

查询并打印7839的姓名和薪水

declare
--定义记录型变量:代表一行
emp_rec emp%rowtype;
begin
select * into emp_rec from emp where empno=7839; dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal);
end;

4.if语句

-- 判断用户从键盘输入的数字
--接受键盘输入
--变量num:是一个地址值,在该地址上保存了输入的值
accept num prompt '请输入一个数字'; declare
--定义变量保存输入 的数字
pnum number := #
begin
if pnum = 0 then dbms_output.put_line('您输入的是0');
elsif pnum = 1 then dbms_output.put_line('您输入的是1');
elsif pnum = 2 then dbms_output.put_line('您输入的是2');
else dbms_output.put_line('其他数字');
end if;
end;

5.循环

– 打印1~10

declare
-- 定义变量
pnum number := 1;
begin
loop
--退休条件
exit when pnum > 10;
dbms_output.put_line(pnum);
--加一
pnum := pnum + 1;
end loop;
end;

6.带参数的光标

查询某个部门的员工姓名

   declare
--形参
cursor cemp(dno number) is select ename from emp where deptno=dno;
pename emp.ename%type;
begin
--实参
open cemp(20);
loop
fetch cemp into pename;
exit when cemp%notfound;
dbms_output.put_line(pename);
end loop;
close cemp;
end;

练习题–给员工涨工资

– 给员工涨工资,总裁1000 经理800 其他400

  declare
--定义光标
cursor cemp is select empno,job from emp;
pempno emp.empno%type;
pjob emp.job%type;
begin
rollback;
--打开光标
open cemp;
loop
--取一个员工
fetch cemp into pempno,pjob;
exit when cemp%notfound;
--判断职位
if pjob = 'PRESIDENT' then update emp set sal=sal+1000 where empno=pempno;
elsif pjob = 'MANAGER' then update emp set sal=sal+800 where empno=pempno;
else update emp set sal=sal+400 where empno=pempno;
end if; end loop;
--关闭光标
close cemp; --提交 ----> why?: 事务 ACID
commit; dbms_output.put_line('完成');
end;

7.系统例外

 被0除
declare
pnum number;
begin
pnum := 1/0;
exception
when zero_divide then dbms_output.put_line('1:0不能做分母');
dbms_output.put_line('2:0不能做分母');
when value_error then dbms_output.put_line('算术或者转换错误');
when others then dbms_output.put_line('其他例外');
end;

8.其他例外

查询50号部门的员工

declare

cursor cemp is select ename from emp where deptno=50;

pename emp.ename%type;

  --自定义例外
no_emp_found exception;
begin
open cemp; --取第一条记录
fetch cemp into pename;
if cemp%notfound then
--抛出例外
raise no_emp_found;
end if; --进程:pmon进程(proccesss monitor)
close cemp; exception
when no_emp_found then dbms_output.put_line('没有找到员工');
when others then dbms_output.put_line('其他例外');
end;

实例书写1

/*

1、SQL语句

select to_char(hiredate,‘yyyy’) from emp;

—> 集合 —> 光标 —> 循环—> 退出: notfound

2、变量:()初始值 ()最终如何得到

每年入职的人数

count80 number := 0;

count81 number := 0;

count82 number := 0;

count87 number := 0;

*/

 	declare
--定义光标
cursor cemp is select to_char(hiredate,'yyyy') from emp;
phiredate varchar2(4);
--每年入职的人数
count80 number := 0;
count81 number := 0;
count82 number := 0;
count87 number := 0;
begin
--打开光标
open cemp;
loop
--取一个员工的入职年份
fetch cemp into phiredate;
exit when cemp%notfound;
--判断年份是哪一年
if phiredate = '1980' then count80:=count80+1;
elsif phiredate = '1981' then count81:=count81+1;
elsif phiredate = '1982' then count82:=count82+1;
else count87:=count87+1;
end if;
end loop; --关闭光标
close cemp; --输出
dbms_output.put_line('Total:'||(count80+count81+count82+count87));
dbms_output.put_line('1980:'|| count80);
dbms_output.put_line('1981:'|| count81);
dbms_output.put_line('1982:'|| count82);
dbms_output.put_line('1987:'|| count87);
end;

实例书写2

/*

1、SQL语句

selet empno,sal from emp order by sal;

—> 光标 —> 循环 —> 退出:1. 总额>5w 2. notfound

2、变量:()初始值 ()最终如何得到

涨工资的人数: countEmp number := 0;

涨后的工资总额:salTotal number;

(1)select sum(sal) into salTotal from emp;

(2)涨后=涨前 + sal *0.1

练习: 人数:8 总额:50205.325

*/

declare
cursor cemp is select empno,sal from emp order by sal;
pempno emp.empno%type;
psal emp.sal%type;
--涨工资的人数:
countEmp number := 0;
--涨后的工资总额:
salTotal number;
begin
--得到工资总额的初始值
select sum(sal) into salTotal from emp; open cemp;
loop
-- 1. 总额 >5w
exit when salTotal > 50000;
--取一个员工
fetch cemp into pempno,psal;
--2. notfound
exit when cemp%notfound; --涨工资
update emp set sal=sal*1.1 where empno=pempno;
--人数+1
countEmp := countEmp +1;
--涨后=涨前 + sal *0.1
salTotal := salTotal + psal * 0.1; end loop;
close cemp; commit;
dbms_output.put_line('人数:'||countEmp||' 总额:'||salTotal);
end;

实例书写3

/*

1、SQL语句

部门:select deptno from dept; —> 光标

部门中员工的薪水: select sal from emp where deptno=?? —> 带参数的光标

2、变量:()初始值 ()最终如何得到

每个段的人数

count1 number; count2 number; count3 number;

部门的工资总额

salTotal number := 0;

(1)select sum(sal) into salTotal from emp where deptno=??

(2)累加

*/

declare

–部门

cursor cdept is select deptno from dept;

pdeptno dept.deptno%type;

  --部门中员工的薪水
cursor cemp(dno number) is select sal from emp where deptno=dno;
psal emp.sal%type; --每个段的人数
count1 number; count2 number; count3 number;
--部门的工资总额
salTotal number := 0;
begin
--部门
open cdept;
loop
--取一个部门
fetch cdept into pdeptno;
exit when cdept%notfound;
--初始化
count1:=0; count2:=0; count3:=0;
--得到部门的工资总额
select sum(sal) into salTotal from emp where deptno=pdeptno;
--取部门的中员工薪水
open cemp(pdeptno);
loop
--取一个员工的薪水
fetch cemp into psal;
exit when cemp%notfound;
--判断
if psal < 3000 then count1:=count1+1;
elsif psal >=3000 and psal<6000 then count2:=count2+1;
else count3:=count3+1;
end if;
end loop;
close cemp;
--保存结果
insert into msg values(pdeptno,count1,count2,count3,nvl(saltotal,0)); end loop;
close cdept; commit;
dbms_output.put_line('完成'); end;

Oracle入门基础(十一)一一PL/SQL基本语法的更多相关文章

  1. oracle入门(6)——PL/SQL常用语法

    [本文介绍] 本文不是”语法大全“,只是记录下作项目里自己常用的一些语法.方便查询. [语法] [输出]   (1)输出语法 DBMS_OUTPUT.PUT_LINE( ) [定义]   (1)定义变 ...

  2. Oracle 数据库基础学习 (八) PL/SQL综合练习

    1.定义游标:列出每个员工的姓名.部门名称并编程显示第10个到第20个记录. declare cursor zemp_cursor is (select temp.ename, temp.dname ...

  3. ORACLE PATCH 版本的查询 PL/SQL

    --ORACLE PATCH 版本的查询 PL/SQL SELECT DD.PATCH_NAME,        PP.CREATION_DATE,        PP.DRIVER_FILE_NAM ...

  4. PL/SQL基本语法

    *2.PL/SQL基本语法   1)匿名块   一段不能在数据库存储的PL/SQL. 基本结构如下:   DECLARE     //变量的声明定义区域(可省略)   BEGIN     //业务处理 ...

  5. Oracle学习(十一):PL/SQL

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/v123411739/article/details/30231659 1.知识点:能够对照以下的录屏 ...

  6. oracle学习(二)pl/sql基础

    pl/sql组成:DDL DML DCL pl/sql特点: SQL&PL/SQL编译器集成PL/SQL,支持SQL所有范围的语法 支持CASE语句和表达式 继承和动态方法释放 类型进化.属性 ...

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

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

  8. PL/SQL编程基础(一):PL/SQL语法简介(匿名PL/SQL块)

    PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...

  9. Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt

    PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...

随机推荐

  1. [LeetCode]1281. 整数的各位积和之差

    给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差. 示例 1: 输入:n = 234 输出:15 解释: 各位数之积 = 2 * 3 * 4 = 24 各位数之和 = ...

  2. pytest--配置用例执行顺序(pytest_ordering插件介绍)

    前言 设置测试用例执行顺序: 默认情况下,pytest测试用例的执行顺序是按先外层后内层(目录下的文 件),再根据名称按ascii码值的顺序升序执行. 如果想自定义pytest测试用例的执行顺序,可以 ...

  3. jmeter重点(详细)

    之前,写过一篇文章:jmeter,学这些重点就可以了,今天就来把一些重点细节点说一下. 测试计划 可以理解为各种测试元件的容器 其中: 定义整个测试中使用的重复值(全局变量),一般定义服务器的ip.端 ...

  4. 想用WPS 2019模板设计报表?Smartbi V9没问题

    导读:Smartbi V9 报表设计器可以支持WPS 2019个人版了,而且报表功能也有明显增强.   企业报表软件(Smartbi Spreadsheet)是思迈特软件于2014年针对企业客户.系统 ...

  5. 思迈特软件与明略科技优势互补强强联合,快速迭代引领BI市场

    从全球范围看,自从上世纪80年代信息技术在企业应用中开始普及,至今一共经历了信息化.SaaS化.移动化和AI化四个阶段. 人工智能在中国发展的机遇和挑战 中国的AI创业公司之间竞争非常激烈,尤其表现在 ...

  6. 【windows 访问控制】三、访问控制列表 ACL=DACL+SACL

    访问控制列表(ACL:Access Control List) ACL列表的结构 ACL 中的每个 ACE 标识一个受信者,并指定该受信者访问规则.安全对象的安全描述符 可以包含两种类型的 ACL:D ...

  7. C# pdb类型文件的作用之一:记录具体异常的关键信息,如文件路径和行号

    pdb 是 Program Debug Database 的简称: 背景 我负责的一个Services(服务)出问题了,原因是一个 dll 内部逻辑出问题了: 在本地修改源码后,重新生成dll(Deb ...

  8. STL漫游之vector

    std::vector 源码分析 从源码视角观察 STL 设计,代码实现为 libstdc++(GCC 4.8.5). 由于只关注 vector 的实现,并且 vector 实现几乎全部在头文件中,可 ...

  9. JZ-031-从 1 到 n 整数中 1 出现的次数

    从 1 到 n 整数中 1 出现的次数 题目描述 求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此 ...

  10. Python语法3

    目录 模块 Python程序架构 第三方工具包: 创建packet包 模块导入方式 异常处理 六种典型异常 异常处理 自定义异常 模块 Python程序架构 Python源代码文件:*.py 一个py ...