PL/SQL基础

PL/SQL简介

PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言

在pl/sql中可以使用:
(1)数据操纵语言
(2)事务控制语言
(3)游标控制
(4)sql函数与sql运算符
pl/sql特点:
(1)可移植性
(2)性能更佳
(3)安全性
(4)与sql紧密集成,简化数据处理

PL/SQL语法格式

declare
变量、常量、游标、自定义异常;
begin
sql语句、pl/sql语句;
exception
错误发生时执行的动作;
end;
  • 执行部分(begin-end部分)为必写项目,其他两部分可选
  • declare内声明变量语法如下(每一行只能有一个变量声明):
变量名 [constant] 数据类型 [not null][:=];

相关简单示例如下:

declare
--声明a,数据类型为varchar2,初始值为HELLO WORLD
a varchar2(20):='HELLO WORLD';
begin
--输出语句意为输出变量a的值
dbms_output.put_line(a);
end;

输出效果如下:
在这里插入图片描述

数据类型

  • 数值类型
    (1)number(a,b)——其中a,b代表自然数,a代表该数值的总位数,b代表小数点后位数,遵守四舍五入
    示例如下:
declare
a number(3,2):=3.141;
b number(3,2):=3.145;
begin
dbms_output.put_line('a的值:'||a);
dbms_output.put_line('b的值'||b);
end;

效果如下:
在这里插入图片描述

  • 字符串类型
    (1)char——定长型字符串
    (2)varchar2——可变型字符串
    char与varchar2区别:
declare
a varchar2(20):='i';
b char(5):='i';
begin
--LENGTHB给出该字符串的byte
dbms_output.put_line('a字节数'||length(a));
dbms_output.put_line('b字节数'||lengthb(b));
end;

效果如下:
在这里插入图片描述

  • 日期类型
    (1)date——再给date类型数据赋值时候需要用到to_date函数
--直接输入
declare
d date :='2001-11-10';
begin
dbms_output.put_line(d);
end;
/
--使用to_date()函数
declare
d date :=to_date('2001-11-10','yyyy-MM-dd');
begin
dbms_output.put_line(d);
end;

效果如下:
在这里插入图片描述
注意:两个过程块一块运行时,需在第一个结束后加/

  • %type类型——获取表中某一列的数据类型
declare
--该语句等价于a varchar2(10) default '刘';
b varchar2(10) default '刘';
a emp.ename%type default '刘';
begin
dbms_output.put_line('a的值:'||a);
dbms_output.put_line('b的值:'||b);
end;

结果如下:
在这里插入图片描述

  • record类型——记录型,需要用户自行声明定义后方可使用该类型
declare
--声明定义记录型类型
type xx is record(
	id number,
	name varchar2(21)
);
--声明a变量为xx类型
a xx;
begin
	a.id:=1;
	a.name:='刘';
	dbms_output.put_line('a.id的值为'||a.id);
	dbms_output.put_line('a.name的值为'||a.name);
end;

效果如图所示:
在这里插入图片描述

  • %rowtype类型——获取表中全部数据类型
declare
a dept%rowtype;
begin
	a.deptno:=20;
	dbms_output.put_line(a.deptno);
	a.dname:='刘';
	dbms_output.put_line(a.dname);
	a.loc:='王';
	dbms_output.put_line(a.loc);
end;

效果如下:
在这里插入图片描述

变量与常量

变量即在程序块中可被多次赋值且会发生改变,常量只允许赋值一次,且不再改变。

常量名 constant 数据类型:=;
  • 去掉constant关键字即为变量
  • 常量必须在声明时初始化即赋值

相关示例如下:

declare
a constant number:=1;
b number:=2;
begin
a :=11;
b:=12;
dbms_output.put_line('a的值:'||a||','||'b的值:'||b);
end;

效果如下:
在这里插入图片描述

变量赋值

  • :=值 与default 值

:=与default意思相同均为赋值,一次只能给一个变量赋值。
简单示例如下:

declare
a varchar(20):='你好';
b number default 10;
begin
dbms_output.put_line(a);
dbms_output.put_line(b);
end;

效果如下:
在这里插入图片描述

  • select into赋值——一次赋予多个变量值,但赋予的每个变量值个数仍为1

示例如下:

--查询smith的工资、奖金、雇员编号
declare
a emp%rowtype;
begin
select sal,comm,empno into a.sal,a.comm,a.empno
from emp where ename='SMITH';
dbms_output.put_line('smith的工资:'||a.sal);
dbms_output.put_line('smith的奖金:'||a.comm);
dbms_output.put_line('smith的雇员编号:'||a.empno);
end;

效果如下:
在这里插入图片描述

输入与输出

  • &符号——接收用户输入的数据

相关使用与示例如下:

--用户输入一个雇员编号,打印emp表中该用户的姓名与工资
declare
a emp%rowtype;
begin
select ename,sal into a.ename,a.sal from emp where empno=&请输入员工编号;
DBMS_OUTPUT.PUT_LINE('姓名'||a.ename);
DBMS_OUTPUT.PUT_LINE('工资'||a.sal);
end;

效果如下所示:
在这里插入图片描述

注:
(1)输入的数据为字符类型时应用单引号包裹&,格式如下

select * from emp where ename ='&请输入员工姓名';

(2)若提示语句有特殊符号如()等,可使用如下格式显示:

select * from emp where ename='&"请输入员工姓名(大写)"';
--若为数字类型则可省略外部''如下
select * from emp where empno =&"请输入员工编号(四位)";

效果如图所示:
在这里插入图片描述
在这里插入图片描述

  • dbms_output——输出
--输出内容后换行
dbms_output.put_line();
--将内容写到内存,等到new_line时候或put_line时能输出
dbms_output.put();

示例如下:

declare
a varchar2(20):=20;
begin
--put_line
dbms_output.put_line(a);
--put
dbms_output.put(a||','||a);
dbms_output.put_line(' ');
dbms_output.put(a||','||a);
dbms_output.new_line();
end;

运行效果如下:
在这里插入图片描述

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值