Oracle数据库之Oracle_PL/SQL(1) 匿名块
小标 2018-10-22 来源 : 阅读 1373 评论 0

摘要:本文主要向大家介绍了Oracle数据库之Oracle_PL/SQL(1) 匿名块,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

本文主要向大家介绍了Oracle数据库之Oracle_PL/SQL(1) 匿名块,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

1. PL/SQL 简介
PL/SQL是一种比较复杂的程序设计语言, 用于从各种环境中访问Oracle数据库。
为什么使用PL/SQL?
Orade是一种关系型数据库, 用来访问关系型数据库的语言是 “结构化査询语言”SQL。
SQL是一种第四代语言,只描述做什么,不描述如何做。
一代语言:01
二代语言:汇编
三代语言:过程(条件判断、循环)
四代语言:sql  DELETE FROM emp where major='MANAGER';
第四代语言相对简单,提供了较少的命令,它将用户与底层的基本数据结构和算法隔离开来。
但缺少第三代语言对过程(条件判断、循环)的处理。
PL/SQL(Procedural Language/SQL)过程性SQL语言,通过增加了过程性控制结构有效的
扩充了SQL的功能。

2. PL/SQL基础
2.1 PL/SQL块
PL/SQL中的基本単位是“块” (block)。
所有的 PL/SQL程序都是由块构成的,
这些块可以顺序出现,也可以相互进行嵌套。
分类:
 匿名块:没有名字,只能被执行一次。
 函数:
 存储过程:
 包:
 触发器:

匿名块语法:
declare
 声明部分;
begin
 执行部分;
exception
 异常处理部分;
end;

第一个例子:
begin
 null;
 --dbms_output.put_line('hello');
end;

2.2 词法单位
词法单位是一个字符序列,包括:
 大写和小写的字母,A~Z和a~z
 数字,0~9
 非显示的空字符,空格、回车、Tab键
 数学符号,+ - * / > < =
 间隔符号,() [] ? % # ! ;
这些符号可以在PLSQL中使用,
PLSQL中不区分大小写(引号内的字符串除外)。

2.2.1 标识符
 标识符是用来给PLSQL对象(变量、游标、类型、函数、存储过程、包、触发器等)命名的。
 必须以字母开头,包括字母、数字、_、#、$,其余字符则是非法的。
 标识符最长30个字符。
 变量命名: v_***
 参数命名: p_***
 函数命名: func_***
 过程命名: proc_***
 包命名:   pkg_***
 触发器命名: tri_***

保留字:被oracle已使用的标识符称为保留字,不能使用保留字作为标识符。
 标引标识符:双引号内的标识符称为标引标识符,标引标识符是区分大小写的。
2.2.2 分界符
 算数运算符:+ - * /
 逻辑运算符:= > < >= <= != <>
 注释符:--   /*  */
 字符串连接符:||
 赋值符: :=

2.2.3 文字
 文字是一个不能成为标识符的字符、数字、布尔值。
 例如:'ABC',23,true,false,null

2.2.4 注释
 注释增强了程序的可读性、使程序更容易被理解。
 注释在编译时会被编译器忽略。
 单行注释:--
 多行注释:/*  */

2.3 变量声明
 变量是一些内存单元,可以在变量中存储数据。
 变量在块的声明部分被定义。
 每个变量都有一个特定的类型及长度。

2.3.1 声明语法
 变量名  类型(长度) [not null] [:=默认值];
举例:
declare
 v_number number:=45;
begin
 dbms_output.put_line(v_number);
end;
字符串长度限制在范围 (1...32767)
declare
 v_char   varchar2(20);
begin
 v_char:='abcde';
 dbms_output.put_line(v_char);
end;

declare
 v_date   date;
begin
 v_date:=sysdate;
 dbms_output.put_line(v_date);
end;

The VARCHAR datatype is currently synonymous with the VARCHAR2 datatype.
Oracle recommends that you use VARCHAR2 rather than VARCHAR.
In the future, VARCHAR might be defined as a separate datatype used
for variable-length character strings compared with different comparison semantics.

2.3.2 变量初始化
如果定义变量时没有给初始化值,默认被赋值为null。
declare
 v_char   varchar2(20);
begin
 dbms_output.put_line(v_char);
end;
如果声明时指定了not null,那么变量就必须被初始化。
declare
 v_char   varchar2(20) not null;
begin
 dbms_output.put_line(v_char);
end;

如果声明时指定了constant,那么变量就必须被初始化,且不能被修改。
declare
 v_char constant varchar2(20):='PLSQL';
begin
 dbms_output.put_line(v_char);
end;

declare
 v_char constant varchar2(20):='PLSQL';
begin
 v_char:='abcde';
 dbms_output.put_line(v_char);
end;

在声明中可以用default来替换赋值符号:=
declare
 v_char   varchar2(20) default 'abcd';
begin
 v_char:='abcde';
 dbms_output.put_line(v_char);
end;
在声明中,每一行只能声明一个变量。
declare
 v_char,v_char2   varchar2(20);
begin
 v_char:='abcde';
 dbms_output.put_line(v_char);
end;

declare
 v_char   varchar2(20);
 v_char2  varchar2(20);
begin
 v_char:='abcde';
 dbms_output.put_line(v_char);
end;

2.4 PL/SQL类型
2.4.1 使用%TYPE
变量可以用来存储表中的数据,
变量应该和表中的列具有相同的数据类型。
declare
 v_ename   varchar2(4);
begin
 select ename into v_ename from emp where empno=7788;
 dbms_output.put_line(v_ename);
end;

declare
 v_ename   emp.ename%type;
begin
 select ename into v_ename from emp where empno=7788;
 dbms_output.put_line(v_ename);
end;

2.4.2 使用%ROWTYPE
declare
 v_emp   emp%rowtype;
begin
 select * into v_emp from emp where empno=7788;
 dbms_output.put_line(v_emp.ename);
end;

2.4.3变量作用域和可见性
变量的作用域是可以访问该变量的程序部分。
对于PLSQL变量,作用域就是从变量声明开始直到该块的结束。
变量超出作用域后,系统自动回收变量的内存空间。

2.5表达式和运算符
2.5.1赋值
变量:=表达式;
出现在:=左边的称为左值,出现在:=右边的称为右值。
左值必须是指向实际的存储单元,即右值被写入的内存位置。
所有的左值都是变量。
declare
 v_number number;
begin
 v_number:=5*2;
 dbms_output.put_line(v_number);
end;
每行语句只能对一个变量赋值。
declare
 v_number number;
 v_number2 number;
begin
 v_number:=v_number2:=5*2;
 dbms_output.put_line(v_number);
end;

2.5.2 表达式
PLSQL表达式是右值。
表达式单独作为一个语句使用是无效的。
表达式只能是语句的一部分。
declare
 v_number number;
begin
 5*2;
 dbms_output.put_line(v_number);
end;

本文由职坐标整理并发布,希望对同学们学习Oracle有所帮助,更多内容请关注职坐标数据库Oracle数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程