Oracle入门基础(十一)一一PL/SQL基本语法
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基本语法的更多相关文章
- oracle入门(6)——PL/SQL常用语法
[本文介绍] 本文不是”语法大全“,只是记录下作项目里自己常用的一些语法.方便查询. [语法] [输出] (1)输出语法 DBMS_OUTPUT.PUT_LINE( ) [定义] (1)定义变 ...
- Oracle 数据库基础学习 (八) PL/SQL综合练习
1.定义游标:列出每个员工的姓名.部门名称并编程显示第10个到第20个记录. declare cursor zemp_cursor is (select temp.ename, temp.dname ...
- ORACLE PATCH 版本的查询 PL/SQL
--ORACLE PATCH 版本的查询 PL/SQL SELECT DD.PATCH_NAME, PP.CREATION_DATE, PP.DRIVER_FILE_NAM ...
- PL/SQL基本语法
*2.PL/SQL基本语法 1)匿名块 一段不能在数据库存储的PL/SQL. 基本结构如下: DECLARE //变量的声明定义区域(可省略) BEGIN //业务处理 ...
- Oracle学习(十一):PL/SQL
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/v123411739/article/details/30231659 1.知识点:能够对照以下的录屏 ...
- oracle学习(二)pl/sql基础
pl/sql组成:DDL DML DCL pl/sql特点: SQL&PL/SQL编译器集成PL/SQL,支持SQL所有范围的语法 支持CASE语句和表达式 继承和动态方法释放 类型进化.属性 ...
- Oracle学习笔记十 使用PL/SQL
PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...
- PL/SQL编程基础(一):PL/SQL语法简介(匿名PL/SQL块)
PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...
- Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt
PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...
随机推荐
- [LeetCode]1281. 整数的各位积和之差
给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差. 示例 1: 输入:n = 234 输出:15 解释: 各位数之积 = 2 * 3 * 4 = 24 各位数之和 = ...
- pytest--配置用例执行顺序(pytest_ordering插件介绍)
前言 设置测试用例执行顺序: 默认情况下,pytest测试用例的执行顺序是按先外层后内层(目录下的文 件),再根据名称按ascii码值的顺序升序执行. 如果想自定义pytest测试用例的执行顺序,可以 ...
- jmeter重点(详细)
之前,写过一篇文章:jmeter,学这些重点就可以了,今天就来把一些重点细节点说一下. 测试计划 可以理解为各种测试元件的容器 其中: 定义整个测试中使用的重复值(全局变量),一般定义服务器的ip.端 ...
- 想用WPS 2019模板设计报表?Smartbi V9没问题
导读:Smartbi V9 报表设计器可以支持WPS 2019个人版了,而且报表功能也有明显增强. 企业报表软件(Smartbi Spreadsheet)是思迈特软件于2014年针对企业客户.系统 ...
- 思迈特软件与明略科技优势互补强强联合,快速迭代引领BI市场
从全球范围看,自从上世纪80年代信息技术在企业应用中开始普及,至今一共经历了信息化.SaaS化.移动化和AI化四个阶段. 人工智能在中国发展的机遇和挑战 中国的AI创业公司之间竞争非常激烈,尤其表现在 ...
- 【windows 访问控制】三、访问控制列表 ACL=DACL+SACL
访问控制列表(ACL:Access Control List) ACL列表的结构 ACL 中的每个 ACE 标识一个受信者,并指定该受信者访问规则.安全对象的安全描述符 可以包含两种类型的 ACL:D ...
- C# pdb类型文件的作用之一:记录具体异常的关键信息,如文件路径和行号
pdb 是 Program Debug Database 的简称: 背景 我负责的一个Services(服务)出问题了,原因是一个 dll 内部逻辑出问题了: 在本地修改源码后,重新生成dll(Deb ...
- STL漫游之vector
std::vector 源码分析 从源码视角观察 STL 设计,代码实现为 libstdc++(GCC 4.8.5). 由于只关注 vector 的实现,并且 vector 实现几乎全部在头文件中,可 ...
- JZ-031-从 1 到 n 整数中 1 出现的次数
从 1 到 n 整数中 1 出现的次数 题目描述 求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此 ...
- Python语法3
目录 模块 Python程序架构 第三方工具包: 创建packet包 模块导入方式 异常处理 六种典型异常 异常处理 自定义异常 模块 Python程序架构 Python源代码文件:*.py 一个py ...