PL/SQL

简介

  • PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言。
  • PL/SQL 是对 SQL 的扩展。
  • 支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构。
  • 可用于创建存储过程、函数、触发器和程序包,给SQL语句的执行添加程序逻辑。

作用:

如果出现需要插入1000条数据,这些数据带有某种规律性,就可以通过PL/SQL进行增加数据的操作

优点:

  1. 支持 SQL,在 PL/SQL 中可以使用:

    • 数据操纵命令:DML,DDL(需要动态执行)
    • 事务控制命令:TCL
    • 游标控制, 下一章学习
    • SQL函数和SQL运算符
  2. 与 SQL 紧密集成,简化数据处理。
    • 支持所有 SQL 数据类型
    • 支持 NULL 值
    • 支持 %TYPE 和 %ROWTYPE
      • %TYPE: 引用字段类型,如:employee.ename%TYPE
      • %ROWTYPE:引用表的行类型, 如: employee%ROWTYPE
  3. 支持面向对象编程 (OOP)
  4. 可移植性,可运行在任何操作系统和平台上的Oralce 数据库
  5. 更佳的性能,PL/SQL 经过编译执行

常用数据类型

  • 数值

    number, numeric, decimal, float, int, integer, real
  • 字符串

    varchar,varchar2,string(PLSQL特有的)
  • 布尔类型boolean
  • 日期常用类型

    date, timestamp
  • 属性类型

    %type:引用某一个变量的类型或都是某个列名(字段)的类型。employee.ename%type;

    %rowtype:表示可存储某表行的记录类型。Employee%rowtype;

变量声明以及赋值

--赋值号为 :=
$变量名$ [CONSTANT] $datatype$ [NOT NULL] [:= value];--赋值
$变量名$ [CONSTANT] $datatype$ [NOT NULL] [DEFAULT expr];--默认值 age int;--声明一个整型变量age,
age int := 18;--声明age并赋值
age int default 18;--默认age为18
age constant int :=18;--声明整型常量age并赋值为18 --声明一个与employee.ename相同类型的变量myname
myname employee.ename%type; --声明一个变量,类型为表的行类型(相当于表中每条数据对应的实体类)
rec_emp employee%rowtype;--employee表中的数据有多少列,rec_emp也有多少列 --例子,输入员工编号,输出该员工信息
declare
v_empno employee.empno%type;
rec_emp employee%rowtype;
begin
v_empno := &请输入员工编号;
select * into rec_emp from employee where empno=v_empno;
--使用 .列名 得到列的值
dbms_output.put_line(rec_emp.empno||','
||rec_emp.ename||','
||rec_emp.sal||','
||rec_emp.job);
end;
/ --自定义一个新的数据类型,然后再用这个去声明变量,使用的话也是 .列名
type TYPE_EMP_REC is record(
empno employee.empno%type,
ename employee.ename%type,
sal employee.sal%type,
job employee.job%type
); --赋值还可以通过select into语句
select ename into myname from employee where empno=7879;
--多个变量,注意要两边要对应
select ename,sal into myname,mysal from employee where empno =7879;

基本单元框架

[DECLARE
--声明变量、常量、游标、自定义记录类型等。
]
BEGIN
--执行部分。
[EXCEPTION
--异常处理部分。
]
END;
/ --立即执行

输出输入语句

输出

oracle内置有一个dbms_output对象,负责输出

dbms_output对象有两个输出方法,一个为put,另外一个外put_line

参数可以接收数值型

--此方法不能立即输出,需要等待数据缓冲区满了之后或者是刷新数据缓冲区之后才会输出
dbms_output.put('hello world');
--下面两个任选一个即可让上面的hello world立即输出
dbms_output.put_line('');
dbms_output.new_line; dbms_output.put_line('hello world');--立即输出

如果是在命令行窗口的话,没有见到输出语句,需要设置开启输出

set serveroutput on;

输入

--&号在PL/SQL中作为一个替代变量,用于在运行中输入值。如果输入的是字符类型那把&号放在两个单引号中,
--若是数字则不用单引号括起来
v_ename := '&请输入姓名:';
v_sal := &请输入工资;

输入输出例子

declare
v_name varchar2(10) := '&输入名字';
v_age int := &输入年龄;
begin
dbms_out.put_line('我是'||v_name||'年龄为'||v_age);
--使用||连接字符串
end;
/

判断与分支语句

if判断

--if判断
if 表达式 then
end if

if-else判断

--if-else判断
if 表达式 then
--代码
else
--代码
end if

if-else if判断

--if-else if判断
if 表达式 then
else if 表达式 then
--代码
else
--代码
end if
end if

例子:

--出现几个if就得出现几个end if
declare
v_sal employee.sal%type := &请输入工资;
begin
if v_sal >=5000 then
dbms_output.put('经理');
else if v_sal<5000 and v_sal >=3000 then
dbms_output.put('员工');
else if v_sal<3000 and v_sal>1000 then
dbms_output.put('other');
else
dbms_output.put('others');
end if;
end if;
end if;
dbms_output.new_line;
end;
/ --少了elsle
declare
v_sal employee.sal%type := &请输入工资;
begin
if v_sal >=5000 then
dbms_output.put('经理');
else if v_sal<5000 and v_sal >=3000 then
dbms_output.put('员工');
else if v_sal<3000 and v_sal>1000 then
dbms_output.put('other');
end if;
end if;
end if;
dbms_output.new_line;
end;
/

case分支语句

--1.判断是否满足表达式
case
when 表达式 then
--代码
when 表达式 then
--代码
else
--代码
end case; --2.判断是否等于某个数值
case
when 数值 then
--代码
when 数值 then
--代码
else
--代码
end case;

数值不能能为字符串类型

循环语句for while loop

loop循环

--无条件循环
loop
--代码以及初始化相关
--满足条件退出当前循环
IF 条件 THEN
EXIT;
END IF;
--或者使用 EXIT WHEN 条件
end loop;

while循环

--有条件循环
--满足条件进入循环
while 条件 LOOP
--初始化数值;
--代码
EXIT WHEN 条件; --满足条件退出循环
--代码
end loop;

for循环

--oracle会自动创建计数器变量,也就是我们的i
--除了i,也可以起其他的名字 --相当于for(i=1;i<=10;i++)
for i in 1..10 loop
--statement;
end loop; --相当于for(i=10;i>=1;i--)
for i in reverse 1..10 loop
--statement;
end loop; -使用变量作为for循环的范围
declare
v_min integer default 1;
v_max integer default 20;
begin
for i in reverse v_min..v_max loop
dbms_output.put(i||',');
end loop;
dbms_output.new_line;
end;
/

循环结构练习

--遍历输出某个部门的全部员工信息
declare
v_deptno integer := &请输入部门号;
begin
for emp in (select e.* from employee e where deptno=v_deptno) loop
dbms_output.put_line(||emp.empno||','||emp.ename||','||emp.job||','||emp.sal);
end loop;
end;
/ --for打印99乘法表
begin
--如果不在rownum,可以吗?
for num1 in 1..9 loop
for num2 in 1..num1 loop
dbms_output.put(num2||'*'||num1||'='||num1*num2||' ');
end loop;
dbms_output.new_line;
end loop;
end;
/ --loop打印99乘法表
declare
num1 int := 1;
num2 int;
begin
loop
num2 := 1;
loop
dbms_output.put(num2||'*'||num1||'='||num1*num2||' ');
exit when num1=num2;
num2 := num2+1;
end loop;
dbms_output.new_line;
exit when num1=9;
num1 := num1+1;
end loop;
end;
/ --while打印99乘法表
declare
num1 int := 1;
num2 int;
begin
while num1 <= 9 loop
num2 := 1;
while num2 <= num1 loop
dbms_output.put(num2||'*'||num1||'='||num1*num2||' ');
exit when num2=num1;
num2 :=num2+1;
end loop;
dbms_output.new_line;
exit when num1=9;
num1 := num1+1;
end loop;
end;
/

oracle学习笔记(十五) PL/SQL语法结构以及使用的更多相关文章

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

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

  2. oracle学习笔记4:PL/SQL

    PL/SQL是没命名的存储过程,函数,触发器,PL/SQL块的语法格式如下: [declare] --声明部分,可选 begin --执行部分,必须 [exception] --异常处理部分,可选 e ...

  3. Oracle 学习笔记 17 -- 异常处理(PL/SQL)

    程序异常是在操作期间正常,出现在节目的准备过程是不可避免的例外.但是,必须有一个相应的异常处理机 制,以保证程序的正常运行.PL/SQL程序运行过程中出现的错误.称为异常. 一个优秀的程序都应该可以正 ...

  4. oracle学习笔记(五) SQL操作符

    SQL操作符 算术操作符:+加,-减,*乘,/除 比较操作符: <,>,=,!=,<>,<=,>= 常用的判断,<>和!=相同 between $low ...

  5. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  6. Oracle学习笔记(十二)

    十三.存储过程和存储函数1.掌握存储过程(相当于建立一个函数或者方法体,然后通过外部对其调用) 指存储在数据库中供所有程序调用的子程序叫做存储过程或存储函数. 相同点: 完成特定功能的程序 区别: 是 ...

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

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

  8. Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包

    子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中.   子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...

  9. (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)

    一.数据块 数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的. 数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的 ...

随机推荐

  1. 网易发起“疾风”智造IoT联盟,深化“互联网+先进制造业”发展

    7月26日,2019网易云创峰会在杭州拉开序幕,本次峰会以“连接•洞察•进化”为主题,汇聚行业领袖.技术大咖及业界代表,探讨技术演进与行业应用趋势,研商生态合作升级.共赢未来的道路.上午的主论坛中,网 ...

  2. java自学-类与对象

    1.面向对象和面向过程 java是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想. 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为.面向对象思想就是在计算机程序设计过程中, ...

  3. 利用Python进行数据分析-Pandas(第七部分-时间序列)

    时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学.经济学.生态学.神经科学.物理学等.时间序列数据的意义取决于具体的应用场景,主要有以下几种: 时间戳(ti ...

  4. 利用Python进行数据分析-Pandas(第三部分)

    访问数据是使用本书所介绍的这些工具的第一步.这里会着重介绍pandas的数据输入与输出,虽然别的库中也有不少以此为目的的工具. 输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式, ...

  5. 分布式的cap原理

    由来 1998年的加州大学的计算机科学家 Eric Brewer 提出,分布式有三个指标. Consistency,Availability,Partition tolerance. 简称即为CAP. ...

  6. js获取屏幕以及元素宽高的方法

    一.window相关 网页正文部分上:window.screenTop 网页正文部分左:window.screenLeft 屏幕分辨率的高:window.screen.height 屏幕分辨率的宽:w ...

  7. SpringCloud(七):springcloud-config统一管理配置中心

    前言: Spring Cloud Config组件是独立的,不需要注册到eureka.config工作原理是把读取目标到配置拉取到本地缓存一份然后供给其他客户端使用,所以一旦config启动成功,可以 ...

  8. flutter 侧滑删除+侧滑显示删除按钮

    1.侧滑删除 1.1.Dismissible组件 2.侧滑显示删除按钮 2.1.手势监听水平滑动 ------------------------------------分割线------------ ...

  9. 数字图像处理:图像的灰度变换(Matlab实现)

    (1)线性变换:通过建立灰度映射来调整源图像的灰度. k>1增强图像的对比度:k=1调节图像亮度,通过改变d值达到调节亮度目的:0 i = imread('theatre.jpg');i = i ...

  10. springboot项目创建,及运行

    1. File --> new --> spring Initializr(选择jdk,和默认的url)-->next-->通过dubbo调用的服务可以直接下一步,也可以选择w ...