PL/SQL表示SQL的过程式语言扩展(Procedural Language Extension to SQL)。
通过添加任何高级语言所拥有的编程结构和子程序, PL/SQL实现了对SQL的扩展
PL/SQL可用于服务器端(Oracle数据库)和客户端(Oracle Forms等)开发
PL/SQL不是独立的编程语言,它是Oracle RDBMS的一部分
c/s c:客户端 s:服务器端
b/s b:浏览器 s:服务器端
语法:
declare — 这一部分可以省略,如果没有变量的情况下,可以不写
— 声明部分:
普通变量(v_) 变量类型: number varchar2 char date …. ();
–声明时可以不给值,也可以给值,也可以在执行体里可以修改
常量(c_) constant 值;
— 常量一但声明,不能更改 ,也就是在执行体里不能重新变更值
— 给变量赋值 := ; 不能用 = 号
begin
— 执行部分
select ename from emp ;
— 条件判断
— 循环语句
exception
— 异常部分
end;
begin
null ; — 什么也不执行,相当于一个占位符
end ;
— 打印输出
begin
dbms_output.put_line(‘A’) ; — 执行块
end ;
— put_line 和 put 的区别
begin
dbms_output.put(‘A’); — 执行块
dbms_output.put(‘B’); — 执行块
dbms_output.put(‘C’); — 执行块
dbms_output.put(‘D’); — 执行块
dbms_output.put(‘E’); — 执行块
dbms_output.put_line(”);
end ;
— 普通声明变量
declare
v_ename1 varchar2(30); –不赋值
v_ename2 varchar2(30) := ‘aaa’; — 赋值
begin
dbms_output.put_line(v_ename1);
dbms_output.put_line(v_ename2);
end ;
— 普通声明变量 执行块中修改值
declare
v_ename1 varchar2(30); –不赋值
v_ename2 varchar2(30) := ‘aaa’; — 赋值
v_empno number;
begin
v_ename1 := ‘sql哥’;
v_ename2 := ‘爽哥’;
v_empno := 123;
dbms_output.put_line(v_ename1);
dbms_output.put_line(v_ename2);
dbms_output.put_line(v_empno);
end ;
— 普通声明变量 执行块中修改值
declare
v_ename1 varchar2(30); –不赋值
v_ename2 varchar2(30) := ‘aaa’; — 赋值
v_empno number;
begin
v_ename1 := ‘sql哥’;
v_ename2 := ‘爽哥’;
v_empno := 123;
dbms_output.put_line(v_ename1 || ‘ ‘ || v_ename2 || ‘ ‘ || v_empno);
end ;
— 声明常量,必须要给初始值: constant 常量
declare
v_empno number := 123;
c_pi constant number:= 3.1415926;
begin
dbms_output.put_line(v_empno);
dbms_output.put_line(c_pi);
end ;
— 修改常量: constant 常量
declare
v_empno number := 123;
c_pi constant number:= 3.1415926;
c_pi_1 constant number; –报错 常数 ‘C_PI_1’ 的声明必须包含初始赋值
begin
v_empno := 2222;
c_pi := 3.14; — 报错 表达式 ‘C_PI’ 不能用作赋值目标
dbms_output.put_line(v_empno);
dbms_output.put_line(c_pi);
dbms_output.put_line(c_pi_1);
end ;
— %type: 从某一张表中获取表中某一个字段类型
语法:
declare
变量 表.字段%type ;
begin
end ;
— 例1.从emp表中获取ename字段类型
declare
a varchar2(30) ;
— b varchar2(30);
b emp.ename%type ; — 自动接收表中的字段类型及长度
begin
dbms_output.put_line(a || b);
end ;
— 例2.从emp表中获取ename字段类型,并赋值
declare
a varchar2(30) := ‘abc’;
b emp.ename%type := ‘SMITH’ ;
begin
dbms_output.put_line( a || b );
end ;
— 例3.从emp表中获取字段类型
declare
v_ename emp.ename%type := ‘SMITH’;
v_empno emp.empno%type := 7400;
begin
dbms_output.put_line(v_ename || v_empno);
end ;
— 记录类型(复合类型)
语法:
— 将单个变量进行一个封装
declare
— 当前只是声明了一个记录类型
type 类型名 is record(
变量1 类型 ,
变量2 表.字段%type ,
变量3 类型 ,
变量4 表.字段%type
);
— 必须要声明一个变量,来接收记录类型
变量 类型名;
begin
end ;
— 例1.声明一个记录类型,并使用
declare
type rec_1 is record(
v1 varchar2(30) := ‘a’,
v2 emp.ename%type ,
v3 number ,
v4 emp.empno%type
);
v_emp rec_1;
begin
dbms_output.put_line(v_emp.v1);
end ;
— %rowtype 类型(可以获取一张表中所有字段类型)
语法:
declare
变量 emp%rowtype ;
begin
使用变量类型:
变量.字段
end ;
— 例1. 通过 %rowtype 获取emp表中所有字段类型
declare
v_emp emp%rowtype ;
begin
v_emp.empno := 1234;
v_emp.ename := ‘simth’;
dbms_output.put_line(v_emp.empno || v_emp.ename);
end ;
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/database/278999.html