Oracle_PL/SQL(1) 匿名块

时间:2023-01-14 17:47:55

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_PL/SQL(1) 匿名块的更多相关文章

  1. 【PL&sol;SQL】匿名块、存储过程、函数、触发器

    名词解释 子程序:PL/SQL的过程和函数统称为子程序. 匿名块:以DECLARE或BEGIN开始,每次提交都被编译.匿名块因为没有名称,所以不能在数据库中存储并且不能直接从其他PL/SQL块中调用. ...

  2. Oracle&lowbar;PL&sol;SQL&lpar;9&rpar; 例外处理

    例外处理1.例外分类:预定义例外,非预定义例外,自定义例外三种传递例外:如果在例外处理部分exception没有捕捉例外,oracle会将例外传递到调用环境.捕捉并处理例外:使用例外处理部分完成exc ...

  3. Oracle&lowbar;PL&sol;SQL&lpar;7&rpar; 集合

    pl/sql集合处理单行单列数据,可以使用标量变量:处理单行多列的数据,可以使用pl/sql记录(%rowtype,record):处理单列多行数据,可以使用pl/sql集合. pl/sql集合类型是 ...

  4. Oracle&lowbar;PL&sol;SQL&lpar;4&rpar; 过程和函数

    create table s_sc ( SNAME VARCHAR2(20) primary key, c_grade NUMBER(6), m_grade NUMBER(6), e_grade NU ...

  5. 匿名块的四个类型(type rowtype record table)

    Oracle PL/SQL块 匿名块的四个类型 type rowtype record table ---- type (列类型)  %type类型是指声明变量的时候,参考某个表的某个列的类型---- ...

  6. 逆袭之旅DAY16&period;东软实训&period;Oracle&period;匿名块

    2018-07-1216:41:19 六.匿名块 .定义匿名块: declare 定义部分: ---可选部分 begin 执行部分: ---必选部分 exception 异常处理部分: ---可选部分 ...

  7. oracle pl&sol;sql简介、块、过程

    pl/sql语言是oracle在sql上扩展的语言.1 过程.函数.触发器是在pl/sql编写2 过程.函数.触发器是在oracle中3 pl/sql的语句可以在java中直接调用 简单介绍 在sql ...

  8. Oracle&lowbar;PL&sol;SQL&lpar;8&rpar; 动态sql

    动态sql0.pl/sql块的限制 不能执行ddl操作(create.drop.alter): 不能执行部分dcl操作(grant.revoke). 1.语法动态sql:在执行时才能确定要执行的sql ...

  9. Oracle&lowbar;PL&sol;SQL&lpar;3&rpar; 游标

    引言:PLSQL数据类型标量数据类型:数字类.字符类.日期类.布尔类(boolean).复合数据类型:记录(%rowtype).表.数组引用类型:REF CURSORLOB类型:BLOB.CLOB 1 ...

随机推荐

  1. 0003 64位Oracle11gR2不能运行SQL Developer的解决方法

    "应用程序开发"下的"SQL Developer"双击不可用,出现“Windows正在查找SQLDEVELOPER.BAT"的提示,如下图: 搜索博客 ...

  2. 程序猿每个VPN真卡手

    昨天起使用了好久好久觉得是世上最好用的poVPN貌似跑路了 刚刚续费了一年也就这样没有了,可是更多的是心疼没有好用的vpn服务. 不过查到了一个红杏chrome插件,不是vpn 如果单单上网页足够了 ...

  3. android开发获取网络状态,wifi&comma;wap&comma;2g&comma;3g&period;工具类&lpar;一&rpar;

    android开发获取网络状态整理: package com.gzcivil.utils; import android.content.Context; import android.net.Con ...

  4. RFM模型——构建数据库营销的商业战役!(转)

    RFM模型:R(Recency)表示客户最近一次购买的时间有多远,F(Frequency)表示客户在最近一段时间内购买的次数,M (Monetary)表示客户在最近一段时间内购买的金额.一般原始数据为 ...

  5. On-Heap与Off-Heap

    和C#里的托管代码.非托管代码类似

  6. Macaca拓展自己控件的方法

    https://github.com/macacajs/wd.py/blob/3bc4334bcb68733cb230b59d6164110053fd1c16/tests/macaca/test_ut ...

  7. 【mysql】:mysql性能优化总结

    一.Mysql引擎概述 1.MyISAM存储引擎 MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器:每当我们建立一个MyISAM引擎的表时,就会在本地 ...

  8. repos配置

  9. Linux mount 命令进阶

    笔者在<Linux mount 命令>一文中介绍了 mount 命令的基本用法,本文我们接着介绍 mount 命令的一些高级用法,比如 bind mounts(绑定挂载)和 shared ...

  10. 咏南新CS插件开发框架支持DELPHI7

    咏南新CS插件开发框架支持DELPHI7 适用软件:基于数据管理的应用软件适用行业:生产制造.物流.贸易.零售行业的ERP.MRP.CRM.MIS.MES.POS等基于C/S架构的数据库管理系统 运行 ...