PL/SQL学习 (部分语法/创建函数/储存过程/游标等)

PL/SQL

  • PL/SQL 是对 SQL 语言存储过程语言的扩展

  • 它现在已经成为 一种过程处理语言,简称 PL/SQL。

  • (有些类似普通编程语言与sql的结合)

PL/SQL 块
  • PL/SQL 程序由三个块组成,即声明部分、执行部分、异常处理部分
DECLARE 
/* 声明部分: 在此声明 PL/SQL 用到的变量,类型及游标,以及局部的存储过程和函数 */
BEGIN
 /* 执行部分: 过程及 SQL 语句 , 即程序的主要部分 */
EXCEPTION
 /* 执行异常部分: 错误处理 */
END;

PL/SQL 块可以分为三类:

  1. 无名块:动态构造,只能执行一次。
  2. 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们
  3. 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。

例子:

declare 
	type test_rec is record( 
        l_name varchar2(30), 
        d_id number(4)     ),
        V_emp test_rec; 
begin 
        vemp.l_name:=Tom:
        vemp.d_id:=1234;
        
        select last_name,department_id 
        into v_emp 
        from employees 
        where employee_id=200;
        
        dbms_output.put_line(v emp.l_name ||','|| v emp.d_id):
end;
  • plsql内的变量类型,大多数与数据库列的数据类型一样。

在这里插入图片描述

在这里插入图片描述

  • plsql内的赋值号为 :=

  • 程序中 type test_rec is record(……)是记录类型, 记录类型是把逻辑相关的数据作为一个单元存储起来,称作 PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息

  • 定义记录类型语法如下:

TYPE record_type IS RECORD(
 Field1 type1 [NOT NULL] [:= exp1 ],
 Field2 type2 [NOT NULL] [:= exp2 ],
 . . . . . .
 Fieldn typen [NOT NULL] [:= expn ] ) ;
  • 对于select …… into v_emp……可以用 SELECT 语句对记录变量进行赋值,只要保证记录字段与查询结果列表中的字段相配即可。

  • DBMS_OUTPUT.PUT_LINE 过程的功能类似于 Java 中的 System.out.println()直接将输出结果送到 标准输出中.

    • 在使用上述过程之前必须将 SQL * PLUS的环境参数 SERVEROUTPUT 设置为 ON, 否则将看不 到输出结果: set serveroutput on
使用%TYPE

对于上面例子中记录类型内,除了明确写清是哪个类型,还可以通过%type来写

例如

declare
  type test_rec is record (
      l_name employees.last_name%type,
      d_id employees.department_id%type );
  V_emp test_rec;
begin
	
end;
	

使用%TYPE 特性的优点在于:

  • 所引用的数据库列的数据类型可以不必知道;

  • 所引用的数据库列的数据类型可以实时改变。

使用%ROWTYPE

​ PL/SQL 提供%ROWTYPE 操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。

例如:

declare 
	v_emp empoyees%rowtype;

使用%ROWTYPE 特性的优点在于:

  1. 所引用的数据库中列的个数和数据类型可以不必知道;
  2. 所引用的数据库中列的个数和数据类型可以实时改变。
标识符

PL/SQL 程序设计中的标识符定义与 SQL 的标识符定义的要求相同。

要求和限制有:

  • 标识符名不能超过 30 字符;
  • 第一个字符必须为字母;
  • 不分大小写;
  • 不能用’-‘(减号);
  • 不能是 SQL 保留字。
  • 提示: 一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DZZLHcd9-1620785145355)(PLSQL.assets/image-20210512082710537.png)]

练习

1

  • 创建函数,输入参数n, 计算1!+2!+ 3!+ …+ n! 的值。
预备知识
* plsql的函数创建语法
CREATE [OR REPLACE] FUNCTION function_name

[ (argment [ { IN | IN OUT }] Type,
 argment [ { IN | OUT | IN OUT } ] Type ]
[ AUTHID DEFINER | CURRENT_USER ]

RETURN return_type 
{ IS | AS }
<类型.变量的说明>
BEGIN
FUNCTION_body
EXCEPTION&l
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值