• Oracle_PL/SQL(1) 匿名块


    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;

  • 相关阅读:
    壳的编写(1)-- 简介与搭建框架
    Writing Your Own Packer
    中断门
    记一次:Windows的Socket编程学习和分析过程
    封装调用包含界面的MFC dll
    编译vtk8.1.1 + 在vs2017中配置开发环境
    迁移通知
    基于CAN总线的汽车诊断协议UDS(上位机开发驱动篇)
    基于CAN总线的汽车诊断协议UDS(ECU底层模块移植开发)
    浅谈jQuery,老司机带你jQuery入门到精通
  • 原文地址:https://www.cnblogs.com/BradMiller/p/9279566.html
Copyright © 2020-2023  润新知