PLSQL基础知识

合集下载

plsql用法,操作介绍

plsql用法,操作介绍

plsql用法,操作介绍PL/SQL是Oracle数据库中一种重要的编程语言,它提供了强大的数据处理和数据库操作能力。

本文将向大家介绍PL/SQL的用法和操作。

一、PL/SQL基础PL/SQL是一种过程化的编程语言,它可以在Oracle数据库中执行存储过程、函数、触发器和包等对象。

这些对象可以由用户自定义,并在数据库中存储,以供其他用户调用。

PL/SQL提供了丰富的数据类型、控制结构、函数和过程,使得开发者可以方便地编写复杂的数据库操作程序。

二、PL/SQL语法1. 声明语句:在PL/SQL中,需要先声明变量和常量,常见的声明语句有:变量声明(如:变量类型数据类型;),常量声明(如:CONST 常量名数据类型 = 值)。

2. 条件语句:PL/SQL支持多种条件语句,如IF-THEN-ELSE,CASE表达式等。

3. 循环语句:PL/SQL支持FOR循环、WHILE循环和LOOP循环等。

4. 异常处理:PL/SQL提供了异常处理机制,可以捕获和处理运行时出现的错误。

5. 函数和过程:PL/SQL支持定义函数和过程,可以对数据进行操作并返回结果。

三、PL/SQL操作1. 创建存储过程:可以使用CREATE PROCEDURE语句创建存储过程,指定过程的名称、参数和执行逻辑。

2. 调用存储过程:可以使用CALL语句调用存储过程,并传递参数。

3. 创建函数:可以使用CREATE FUNCTION语句创建函数,指定函数的名称、参数和返回值类型。

4. 调用函数:可以使用直接调用函数的方式或通过存储过程调用函数。

5. 创建触发器:可以使用CREATE TRIGGER语句创建触发器,用于在数据插入、更新或删除时触发特定的操作。

6. 修改和删除对象:可以使用ALTER PROCEDURE、DROP PROCEDURE、DROP FUNCTION等语句修改或删除已存在的PL/SQL对象。

四、示例以下是一个简单的PL/SQL程序示例,用于将输入的字符串转换为大写并输出:```plsqlDECLAREv_str VARCHAR2(100);v_upper VARCHAR2(100);BEGIN-- 获取输入字符串:in_str := 'hello world';v_str := :in_str;-- 将字符串转换为大写并输出v_upper := UPPER(v_str);DBMS_OUTPUT.PUT_LINE('转换后的字符串为: ' || v_upper);END;```在上述示例中,我们使用了DECLARE语句声明了两个变量v_str 和v_upper,分别用于存储输入的字符串和转换后的结果。

第9章PLSQL语言基础

第9章PLSQL语言基础


命名块

11

命名块示例
— — — —

— — — — —
CREATE OR REPLACE PROCEDURE showavgsal( p_deptno NUMBER) AS v_sal NUMBER(6,2); BEGIN SELECT avg(salary) INTO v_sal FROM employees WHERE department_id=p_deptno; DBMS_OUTPUT.PUT_LINE(v_sal); END showavgsal;
22

注意
— —





DECLARE v_sal employees.salary%TYPE; v_emp employees%ROWTYPE; BEGIN SELECT salary INTO v_sal FROM employees WHERE employee_id=109; SELECT * INTO v_emp FROM employees WHERE employee_id=150; DBMS_OUTPUT.PUT_LINE(v_sal); DBMS_OUTPUT.PUT_LINE(v_emp.first_name|| v_emp.salary); END;
第9章 PL/SQL语言基础
1
主要内容



PL/SQL语言简介 PL/SQL程序结构 词法单元 数据类型、常量与变量 控制结构 游标 异常处理
2
9.1 PL/SQL语言简介

与SQL语言紧密集成。 减小网络流量,提高应用程序的运行性能。


模块化的程序设计功能,提高了系统可靠性。 服务器端程序设计,可移植性好。

PLSQL基础

PLSQL基础

11
命名规则
选择变量名称的规则
• • • • 变量必须以字母(A~Z)开头 其后跟可选的一个或多个字母、数字(0~9)或特殊字符$、# 或_ 变量长度不超过30个字符 变量名中不能有空格
• 1、标识符命名规则
– 当定义变量时,建议使用v_作为前缀 – 当定义常量时,建议使用c_作为前缀 – 当定义游标时,建议使用_cursor作为后缀 – 当定义异常时,建议使用e_作为前缀 – 当定义PL/SQL表类型时,建议使用_table_type作为后缀 – 当定义表变量时,建议使用_table作为后缀 – 当定义记录类型时,建议使用_record_type作为后缀 – 当定义记录变量时,建议使用_record作为后缀
4
PL/SQL 的运行机制
PL/SQL 引擎驻留在 Oracle 服务器中 该引擎接受 PL/SQL 块并对其进行编译执行
Oracle 服务器 将PL/SQL 块发送给 Oracle 服务器 将结果发送给用户 PL/SQL引擎 过程语句执行器 执行过程语句
用户
引擎将 SQL 语句发送给 SQL 语句执行器
16
使用%type和%rowtype
• 可以使用%type和%rowtype来声明变量,而不必指定特定的数据类型。这两 个属性提供了这种方式:在声明变量时,不指定变量的数据类型,而由表/视 图列或PL/SQL程序包变量来定义变量的数据类型。 • %type和%rowtype可以用于不同的情况。
– 当用户声明单独的变量而不是记录时可以使用%type。 – 当用户声明表示表、视图或游标的完整行的记录变量时可以使用%rowtype。
8
变量和常量
• 用户使用的所有变量和常量都必须在程序块中的声明部分定义。对于每一个 变量,用户都必须规定名称和数据类型,以便在可执行部分为其赋值。 • 在何处为变量赋值是可以选择。既可以选择在可执行部分中为变量赋值,也 可以选择在声明变量时同时为其赋值。如图9-4所示是这两种赋值方式。其中, 第一个示例在可执行部分中为变量赋值,而在第二个示例中,声明变量时同 时赋值。但是,这两种赋值的结果完全一样。第二个示例使用了关键字null。 null关键字表示什么都不做。

PLSQL基础

PLSQL基础

定义变量
变量的作用是用来存储数据,可以在过程语句中使用。
变量在声明部分可以进行初始化,即赋予初值。 变量在定义的同时也可以将其说明成常量并赋予固定的值 变量的命名规则是:
以字母开头,后跟其他的字符序列,字符序列中可以包含字母、 数值、下划线等符号 最大长度为30个字符,不区分大小写。 不能使用Oracle的保留字作为变量名。 变量名不要和在程序中引用的字段名相重,如果相重,变量名 会被当作列名来使用。
运算符和函数
PL/SQL常见的运算符和函数包括以下方面:
算术运算:加(+)、减(-)、乘(*)、除(/)、指数(**)。 关系运算:小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、等 于(=)、不等于(!=或<>)。 字符运算:连接(||)。 逻辑运算:与(AND)、或(OR)、非(NOT)。


create or replace procedure recordpro is v_record student%rowtype; begin select * into v_record from student where name='mly';
Dbms_Output.put_line('id:'||v_record.stude ntid ||' name:' ||v_ || ' age:' ||v_record.age); end recordpro;


ELSE
语句序列n;] END IF;

create or replace procedure ifpro is v_id varchar2(100); begin select studentid into v_id from student where name='mly'; if v_id='001' then Dbms_Output.put_line(v_id); end if ; /* if v_id='001' then Dbms_Output.put_line('v_id=001'); elsif v_id='002' then Dbms_Output.put_line('v_id=002'); else Dbms_Output.put_line('v_id is null'); end if ; */ end ifpro;

PLSQL学习(一) 基础知识

PLSQL学习(一) 基础知识

PLSQL学习(一) 基础知识很久以前自己整理的PLSQL一些基础知识,翻出来看看都是比较基础的内容,还是放上来好了。

参考的资料是《PL/SQL用户指南与参考》中译版,觉得这是一部很不错的入门书,感谢把这本书翻译出来的网友。

1、乘方的不同应用:在SQL中乘方只能使用函数Power(a,b)来计算但在PLSQL中可直接使用a**b表示2、赋值语句Returning:insert into t1 values(90,'SERVICE','BEIJING')Returning rowid,name into row_id,info;注:只限insert、update、delete一条记录时进行赋值3、自定义参数——&:可SQL和PLSQL中均可使用自定义参数,即需要自己输入值的参数select * from ldcom where comcode=&a andname=&b;PLSQL:declare i int := &a; n int := &b;4、绑定变量的使用:可使用绑定变量的办法提高SQL效率SQL> variable x number ;SQL> exec :x := 8600 ;SQL> select * from ldcom where comcode= :x ;注:PLSQL中的declare即隐士绑定,无需再申明可用Print查看绑定变量 SQL> print x;也可使用查询SQL> select :x from dual;实际的简单应用:variable x number;declarev_date date;beginfor i in1.. 10loop:x := i;select sysdate+:x into v_date from dual;dbms_output.put_line(v_date);end loop;end;/在execute immediate中的应用:declarev_x t1.num%type;beginexecute immediate'update t1 set num=8888 where id=:a returning num into :b'using2returning into v_x;dbms_output.put_line(v_x);end;注意returning的返回值在动态SQL中的操作格式5、%TYPE和%ROWTYPE的区别:%TYPE针对某一字段类型(数组也是单一的类型)%ROWTYPE针对某一整表的类型(游标也是整表)6、计数循环的逆序法:for i in reverse10.. 100loop注意reverse的位置不要记错7、一般的游标使用法:1、游标的正常使用需要四步①定义游标cursor c2(dept_no number default10) is----注意定义dept_no的方法select name,agentcode from laagent where rownum <= dept_no;②打开游标open c3(dept_no =>20); ----可以重新定义dept_no③提取游标数据fetch c2 into dept_name,dept_loc;----字符类型、个数相等fetch c3 into deptrec;----deptrec为rowtypeexit when c3%notfound;④关闭游标CLOSE c3;⑤游标属性%FOUND--布尔型属性,当最近一次读记录时成功返回,则值为TRUE;%NOTFOUND--布尔型属性,与%FOUND相反;%ISOPEN--布尔型属性,当游标已打开时返回TRUE;%ROWCOUNT--数字型属性,返回已从游标中读取的记录数。

PLSQL语言基础

PLSQL语言基础



<<OUTER>> DECLARE v_ename CHAR(16); v_outer NUMBER(5); BEGIN v_outer :=10; DECLARE v_ename CHAR(20); v_inner DATE; BEGIN v_inner:=sysdate; v_ename:='INNER V_ENAME'; OUTER.v_ename:='OUTER V_ENAME'; END; DBMS_OUTPUT.PUT_LINE(v_ename); END;
%rowtype变量

定义一个变量,用于存放表中的一行数 据,可以采用下面的定义方法:
变量名 表名%rowtype; 变量名 游标名%rowtype;
示例

DECLARE v_emp emp%ROWTYPE; BEGIN SELECT * INTO v_emp FROM emp WHERE empno=7844; DBMS_OUTPUT.PUT_LINE(v_emp.ename||' '||v_emp.sal); END;


注意:


SELECT…INTO语句只能查询一个记录的信息,如果 没有查询到任何数据,会产生NO_DATA_FOUND异 常;如果查询到多个记录,则会产生 TOO_MANY_ROWS异常。 INTO句子后的变量用于接收查询的结果,变量的个数、 顺序应该与查询的目标数据相匹配,也可以是记录类型 的变量。
Байду номын сангаас
变量的作用域


变量的作用域是指变量的有效作用范围,从变量 声明开始,直到块结束。 如果PL/SQL块相互嵌套,则在内部块中声明的 变量是局部的,只能在内部块中引用,而在外部 块中声明的变量是全局的,既可以在外部块中引 用,也可以在内部块中引用。 如果内部块与外部块中定义了同名变量,则在内 部块中引用外部块的全局变量时需要使用外部块 名进行标识。

PLSQL语言基础

PLSQL语言基础

上机4PL/SQL语言基础上机内容1. 程序结构2. 流程控制3. 异常处理4. 开发动态SQL上机目标1. 掌握PL/SQL程序结构2. 掌握PL/SQL流程控制3. 掌握PL/SQL异常处理4. 掌握PL/SQL中开发动态SQL的方法阶段1指导部分训练内容PL/SQL块程序结构中的数据类型需求说明在VALUES子句中使用记录变量插入数据是Oracle 9i新增的特征。

在VALUES子句中使用记录变量插入数据时,列的顺序、个数、类型必须与记录成员的顺序、个数、类型完全匹配,如图2.4.1所示。

在VALUES子句中使用记录变量图2.4.1 在VALUES子句中使用记录变量另外,从Oracle 9i开始,在SET子句中不仅可以使用记录成员,而且还可以直接使用记录变量。

当在SET子句中使用记录变量更新数据时,列的顺序、个数、类型必须与记录成员的顺序、个数、类型完全匹配。

现要求实现:由用户输入部门编号,通过在SET子句中使用记录变量的方式来修改指定部门信息。

实现思路定义一个关于DEPT部门表的%ROWTYPE变量,让用户通过替换变量给其中的deptno部门编号赋值,通过UPDATE语句进行更新,如图2.4.2所示。

注意使用ROW关键字图2.4.2 在SET子句中使用记录变量练习部分(一)需求说明索引表(TABLE)类型不仅可以在PL/SQL中直接使用,也可以作为表列的数据类型使用。

在表列中使用索引表类型时,必须首先使用CREATE TYPE命令创建索引表类型。

需要注意的是,当使用索引表类型作为列的数据类型时,必须为索引表列指定专用的存储表。

例如,需要存储一个会员(TB_VIPInfo)信息时,需要记录该会员的联系方式,但该会员的联系方式可能有多个,因此可以考虑在记录会员联系方式的列上使用索引表。

创建一个关于会员信息表,并使用索引表类型作为该表中的某列,如图2.4.3所示。

图2.4.3 在表列中使用索引表要求:(1)为索引表列插入数据。

《PLSQL基础》课件

《PLSQL基础》课件
2 函数的定义和应用
掌握函数的创建和使用,以便在SQL查询中返回计算结果。
3 区别和联系
比较存储过程和函数的差异,了解它们在不同场景下的应用。
游标和触发器
1 游标的概念和用法
了解如何使用游标在PLSQL中处理查询结果集。
2 触发器的概念和应用
学习如何创建和使用触发器来自动触发数据库操作。
3 难点分析
1 条件判断语句
掌握IF-THEN、IF-THEN-ELSE和CASE语句,用于根据条件执行不同的代码块。
2 循环语句
学习FOR、WHILE和LOOP语句,以便重复执行代码块。
3 例外处理语句
了解如何处理异常情况,确保代码的可靠性和稳定性。
存储过程和函数
1 存储过程的定义和应用
学习如何创建和调用存储过程,以实现具有复杂逻辑的数据库操作。
了解在哪些场景下使用PLSQL可以极大地提升开发效率和数据处理能力。
2 知识点回顾
复习本课程的核心知识点,加深对PLSQL的理解和掌握。
3 后续学习建议
给出一些建议,帮助学员继续深入学习和应用PLSQL。
PLSQL具有高性能、可扩展性和安全性,它可以有效地处理大量数据和复杂的业务逻辑。
变量与数据类型
1 变量的定义
学习如何声明和使用变量,以存储和操作数据。
2 数据类型的分类和应用
了解各种数据类型的特性和用法,包括数字、字符、日期等类型。
3 常量的定义和应用
学习如何定义和使用常量,以存储不可变的值。
控制语句
探讨使用游标和触发器时可能遇到的常见问题和解决方法。
高级技巧
1 包的定义和使用
了解包的概念和结构,学习如何使用包来组织和管理PLSQL代码。

PLSQL基础

PLSQL基础
触发器(trigger) 触发器与一个表或数据库事件联系在一起的, 当一个触发器事件发生时,定义在表上的触发器被触发。 CREATE [OR REPLACE] TRIGGER trigger_name {before|after|instead of} event ON {table_or_view_name|DATABASE} [FOR EACH ROW[WHEN condition]] trigger_body
函数
函数是命名了的、存储在数据库中的PL/SQL程序块。函数接受零个或多个输入 参数,有一个返回值,返回值的数据类型在创建函数时定义。 定义函数的语法如下: FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS [local declarations] BEGIN execute statements [EXCEPTION exception handlers] END [name]
包(package)
包其实就是被组合在一起的相关对象的集合,当包中任何函数或存储过 程被调用,包就被加载入内存中,包中的任何函数或存储过程的子程序访 问速度将大大加快。包由两个部分组成:规范和包主体(body),规范描述 变量、常量、游标、和子程序,包体完全定义子程序和游标。
触发器(trigger)
结束!谢谢!
PL/SQL块结构
声明部分(Declaration section) 声明部分包含了变量和常量的数据类型和初始值。 这个部分是由关键字DECLARE开始,如果不需要声明变量或常量,那么可以忽 略这一部分;需要说明的是游标的声明也在这一部分。 执行部分(Executable section) 执行部分是PL/SQL块中的指令部分,由关键字 BEGIN开始,所有的可执行语句都放在这一部分,其他的PL/SQL块也 可以放在这一部分。 异常处理部分(Exception section) 这一部分是可选的, 在这一部分中处理异常或错误。

PLSQL基础教程

PLSQL基础教程

PL/SQL程序设计目录第一章PL/SQL 程序设计简介 (4)§1.2SQL与PL/SQL (4)§1.2.1 什么是PL/SQL? (4)§1.2.1 PL/SQL的好处 (4)§1.2.2 PL/SQL 可用的SQL语句 (5)§1.3运行PL/SQL程序 (5)第二章PL/SQL块结构和组成元素 (6)§2.1PL/SQL块 (6)§2.2PL/SQL结构 (6)§2.3标识符 (6)§2.4PL/SQL变量类型 (7)§2.4.1 变量类型 (7)§2.4.2 复合类型 (9)§2.4.3 使用%ROWTYPE (11)§2.4.4 LOB类型* (11)§2.4.5 Bind 变量 (11)§2.4.6 INDEX BY TABLES (12)§2.4.7 数据类型的转换* (13)§2.5运算符和表达式(数据定义) (13)§2.5.1 关系运算符 (13)§2.5.2 一般运算符 (13)§2.5.3 逻辑运算符 (14)§2.6变量赋值 (14)§2.6.1 字符及数字运算特点 (14)§2.6.2 BOOLEAN 赋值 (14)§2.6.3 数据库赋值 (14)§2.6.4 可转换的类型赋值 (15)§2.7变量作用范围及可见性 (15)§2.8注释 (16)§2.9简单例子 (17)§2.9.1 简单数据插入例子 (17)§2.9.2 简单数据删除例子 (17)第三章PL/SQL流程控制语句 (18)§3.1条件语句 (18)§3.2CASE表达式 (19)§3.3循环 (19)§3.3标号和GOTO (21)§3.4NULL语句 (21)第四章游标的使用 (23)§4.1游标概念 (23)§4.1.1 处理显式游标 (23)§4.1.2 处理隐式游标 (26)§4.1.3 游标修改和删除操作 (27)第五章异常错误处理 (29)§5.1异常处理概念 (29)§5.1.1 预定义的异常处理 (29)§5.1.2 非预定义的异常处理 (30)§5.1.3 用户自定义的异常处理 (31)§5.1.4 用户定义的异常处理 (32)§5.2异常错误传播 (33)§5.2.1 在执行部分引发异常错误 (33)§5.2.2 在声明部分引发异常错误 (34)§5.3异常错误处理编程 (34)§5.4在PL/SQL中使用SQLCODE,SQLERRM (35)第六章存储函数和过程 (36)§6.1引言 (36)§6.2创建函数 (36)§6.3存储过程 (39)§6.3.1 创建过程 (39)§6.3.2 调用存储过程 (40)§6.3.3 开发存储过程步骤 (42)§6.3.4 与过程相关数据字典 (43)第七章包的创建和应用 (44)§7.1引言 (44)§7.2包的定义 (44)§7.3包的开发步骤 (45)§7.4包定义的说明 (45)§7.5子程序重载 (48)§7.6删除过程、函数和包 (50)§7.7包的管理 (50)第八章触发器 (51)§8.1触发器类型 (51)§8.1.1 DML触发器 (51)§8.1.2 替代触发器 (51)§8.1.3 系统触发器 (51)§8.2创建触发器 (51)§8.2.1 触发器触发次序 (53)§8.2.2 创建DML触发器 (53)§8.2.3 创建替代(Instead_of)触发器 (54)§8.2.3 创建系统事件触发器 (54)§8.2.4 系统触发器事件属性 (55)§8.2.5 使用触发器谓词 (56)§8.2.6 重新编译触发器 (56)§8.3删除和使能触发器 (56)§8.4触发器和数据字典 (57)§8.5数据库触发器的应用举例 (57)第一章PL/SQL 程序设计简介PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。

plsql基础(数据类型、定义变量)、游标、过程、函数、包、触发器(系统触发器)

plsql基础(数据类型、定义变量)、游标、过程、函数、包、触发器(系统触发器)

【原创】oracle的学习六:pl/sql基础(数据类型、定义变量)、游标、过程、函数、包、触发器(系统触发器)2011-07-27 21:42:48| 分类:ORACLE | 标签:pl/sql基础数据类型定义变量游标、过程、函数包、触发器|字号大中小订阅1.PL/SQL的介绍∙pl/sql是什么pl/sql是oracle在标准sql语言上的扩展。

pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用另外处理各种错误,功能强大。

∙为什么学pl/sql优点:1.提高应用程序的运行性能2.模块化得设计思想3.减少网络传输量4.提高数据库访问的安全性缺点:移植性不好∙开发工具:环境设置:∙页大小和行大小:set pagesize 50 linesize 120;∙更改日期格式:alter session setnls_date_format='YY-MM-DD HH24:MI:SS';∙为使用程序包DBMS_OUTPUT中的PUT_LINE过程输出: set serveroutput on;1.sqlplus---oracle公司提供的一个工具。

2.pl/sql developer 开发工具pl/sql developer 是用于开发pl/sql块的IDE,独立的产品。

举例:创建过程:create [or replace ] procedure 过程名is begin----执行过程end;/replace:表示如果存在过程名,就替换。

--:注释查看错误信息:show error调用过程:法一:exec 过程名(参数列);法二:call 过程名(参数列);∙块的类型所有的PL/Sql程序都是以块为基本单位。

块包含过程化语句和DML 语句。

块的分类:∙匿名块:出现在应用程序中的、没有名字、不存储在数据库中的块。

可以出现在SQL语句出现的地方。

可以调用其他程序,不能被调用。

教学文档PlSQL基础

教学文档PlSQL基础

目录1知识点 (1)1.1上次课程的主要知识点 (1)1.2本次预计讲解的知识点 (2)2具体内容 (2)2.1PL/SQL基础 (2)2.2PL/SQL条件分支与循环 (6)2.3动态SQL (6)2.4异常处理 (7)3 总结 (9)4 作业 (9)课程名称:Pl/SQL基础1知识点1.1上次课程的主要知识点Oracle概述体系结构→ Oracle Server –[实例(SGA+后台进程),数据库(*.dbf,*.ctl,*log)] 数据库的逻辑结构◆表空间tablespace◆段[数据段,索引段,回退段,临时段] Segment◆区[extents]◆块block◆模式对象[表,视图,索引,子程序…]启动与关闭用户与角色◆每个用户都有默认的表空间和临时表空间◆如果某用户需要创建表,则必须至少三个权限:●创建会话create session●创建表create table●使用表空间权限:⏹alter user 用户名quota xxM|unlimited on 表空间名称1.2 本次预计讲解的知识点PL/SQL基础PL/SQL条件分支与循环动态SQL异常处理Exception2具体内容2.1 PL/SQL基础1. PL/SQL简介Procedure Language & Structured Query Language的缩写作为Oracle的重要组件.PL/SQL是对SQL语言的扩展标准ANSI – SQL 92/ 99分为六大类:扩展:2. PL/SQL块分类匿名块pl/sql块脚本→运行时发送到服务器端→pl/sql引擎→运行结果命名块→子程序[存储在服务器端]3. PL/SQL的组成4. PL/SQL 规范化标识符5. Pl/SQL类型6. PL/SQL声明变量示例:7. 为变量赋值两种方式:使用:=使用select … into 变量名8. 常量2.2 PL/SQL条件分支与循环2.3 动态SQL在编译时,仅作为字符串进行处理,执行时,再动态的绑定参数,编译执行.增强pl/sql 灵活性.执行动态SQL 的语法:EXECUTE IMMEDIATE dynamic_sql_string[INTO define_variable_list][USING bind_argument_list];为什么需要使用动态sql?⏹动态可以动态拼接SQL语句,绑定参数,灵活性增强⏹可以执行DDL语句2.4 异常处理有两种类型的异常错误预定义--系统自动引发用户自定义--手工通过raise引发异常. [throw]--为变量赋值select ename into v_ename from emp;dbms_output.put_line('变量ename的值: '||v_ename);exceptionwhen too_many_rows thendbms_output.put_line('返回了多行数据!!!');when no_data_found thendbms_output.put_line('没有发现对应的数据!!!');when others thendbms_output.put_line('其他错误: '||sqlerrm);end;dbms_output.put_line('程序执行此行!!!');end;用户自定义异常:1> 声明异常的变量2> 根据条件引发自定义异常raise3> exception when 捕获并处理自定义异常declaree_invalidKind exception; --定义异常变量v_kind varchar2(10) := '&"请输入类别号<A,B,C,D>"';beginif(v_kind not in ('A','B','C','D')) thenraise e_invalidKind; --引发异常elsedbms_output.put_line('您选择的类别为: '||v_kind);end if;exceptionwhen e_invalidKind then-- 捕获异常dbms_output.put_line('输入的类别无效!');end;3 总结PL/SQL 是一种可移植的高性能事务处理语言PL/SQL 引擎驻留在Oracle 服务器中PL/SQL 块由声明部分、可执行部分和异常处理部分组成PL/SQL 数据类型包括标量数据类型、LOB 数据类型和属性类型 PL/SQL支持动态SQL控制结构包括条件控制、循环控制和顺序控制运行时出现的错误叫做异常异常可以分为预定义异常和用户定义的异常4 作业。

第1章PLSQL基础知识

第1章PLSQL基础知识

第1章PLSQL基础知识Oracle数据库PL/SQL开发----PL/SQL基础知识章节目标了解/的基本概念了解PL/SQL的基本概念掌握PL/SQL块的基本组成区分/变量和非/变量?区分PL/SQL变量和非PL/SQL变量?掌握如何声明变量掌握如何对变量进行赋值掌握%TYPE的使用理解在/SQ中SQ语句的作用?理解在PL/SQL中SQL语句的作用本章主要内容知识点掌握程度难易程度项目介绍介绍背景项目了解为什么使用PL/SQL 什么是PL/SQL 理解PL/SQL的优点了解PL/SQL结构块类型了解理解块结构变量声明语法掌握数据类型:标量类型掌握数据类型:复合类型了解数据类型外部变量数据类型:外部变量了解变量赋值掌握函数及注释注释掌握PL/SQL函数的应用:有效函数掌握PL/SQL函数的应用:无效函数掌握与Oracle的交互PL/SQL中的SELECT语句掌握PL/SQL中的DML语句掌握PL/SQL中的事务处理语句掌握PL/SQL概述什么是PL/SQL发专用的种程序设计?PL/SQL是由Oracle开发,专用于Oracle 的一种程序设计语言PL代表Procedural LanguageProcedural LanguageSQL代表Structured Query LanguagePL/SQL是Oracle数据库对SQL语句的扩展,增加了编程语言的特点PL/SQL 包含过程化语句和SQL语句数据操作和查询语句被包含在/Q代码的程序单元中?PL/SQL(PL/SQL块),经过逻辑判断、循环等操作完成复杂的功能或者计算.PL/SQL的优点改善了性能PL/SQL以整个语句块发送给服务器,这个过程在单次调用中完成,降低了网络拥挤。

而如果不使用PL/SQL,每条SQL语句都有单独的传输交互,在网络环境下占用大量的服务器时间,同时导致网络拥挤。

服务器时间同时导致网络拥挤可重用性PL/SQL能运行在任何ORACLE环境中(不论它的操作系统和平台),在其他ORACLE能够运行的操作系统上无需修改代码。

PLSQL基础培训PPT课件

PLSQL基础培训PPT课件
PL_SQL基础培训
PL/SQL 语言
SQL中操作符的使用
定义:操作符是保留的字或字符,主要用于比 较和算术运算。
分类:比较操作符,逻辑操作符和算术运算符。 1、比较操作符
包括:=,<>, >, <, <=, >=。 注意比较双方的数据类型。 2、算术运算符 包括:+,-,*,/等。 与数学运算规则一致。
PL/SQL 语言
PL_SQL基础培训
通过本章的学习应该掌握:
PL/SQL语言的编程规范 Oracle数据库的基本数据类型和函数 应用PL/SQL语言编写基本的sql
PL_SQL基础培训
一、PL/SQL语言编程规范 1)命名
语言---命名使用能表述对象意义的单词或者约定俗成的符号,不允 许使用中文或者特殊符号。
单词分隔---命名的各单词使用下划线进行分隔。 保留字----命名禁止使用sql保留字(可以在v$reserved_words视
图中查找所有的保留字)。 命名长度---限制在30个字符内(含前缀)。
PL_SQL基础培训
2)命名规范
普通变量---前缀为v_,存放字符、数字、日期型变量。 游标变量---前缀为cur_,存放游标记录集。 存储过程---前缀为p_,按照业务操作命名。 函数---前缀为f_,按照业务操作命名。 包---前缀为pkg_,按照业务操作集合命名。 触发器---前缀为trig_,触发器名是前缀+表名+触发器名 索引---前缀为IDX_,索引名是前缀+表名+索引字段
Sequence_of_statement1; ELSE
Sequence_of_statement2; END IF;
PL_SQL基础培训

PLSQL基础

PLSQL基础

1、PL/SQL概述:PL/SQL(Procedural Language/SQL)是Oracle在标准SQL语言上的过程性扩展。

PL/SQL不仅允许嵌入SQL语句,而且允许定义变量和常量,允许使用条件和循环语句,允许使用异常处理各种错误。

2、PL/SQL块结构:块是pl/sql的基本程序单元,一个PL/SQL块中可以嵌套其他PL/SQL块,而且嵌套层次没限制。

PL/SQL块由三部分组成:定义部分、执行部分、异常部分。

如下所示:declare--可选定义部分:定义常量、变量、复杂数据类型、游标等begin--执行部分:执行PL/SQL语句和SQL语句exception--可选异常处理部分:处理运行错误end;--块结束3、PL/SQL块的分类:☆匿名块:没有名称的PL/SQL块,通常动态生成,只能执行一次,不能存储在数据库中。

☆命名块:有特定名称的PL/SQL块,名称通过块首<<block name>>标签来指定,可嵌套。

☆子程序:存储在数据库中的过程、函数、包。

生成后可被多次调用☆触发器:隐含执行的存储过程,当特定事件发生时自动被调用执行。

4、PL/SQL定义变量及其使用PL/SQL定义变量或常量的语法:<identifierName> [constant] <datatype> [not null] [:=expr]解释说明:identifierName是变量或常量名,由自己按命名规则取名;constant说明定义的是常量,当使用constant时,必须指定初始值,且在运行过程中数值不能改变;datatype用于指定变量或常量的数据类型,如varchar2;not null表示必须为变量赋初值;:=用于为变量或常量指定初始值;expr为初始值。

例子:declarev_ename varchar2(20);--定义变量v_sal number(6,2);beginv_ename:=’张三’;--为变量赋值v_sal:=2300.00dbms_output.put_line(v_ename||v_sal);--要显示结果先得执行set serveroutput on;select ename,sal into v_ename,v_sal from emp where empno=7369;--查询语句为变量赋值dbms_output.put_line(v_ename||v_sal);end;/ --斜杠/使得程序正常结束5、PL/SQL数据类型:5.1标量数据类型:标量变量是指只能存储单个数值的变量。

第1章PLSQL基础知识

第1章PLSQL基础知识

Oracle数据库PL/SQL开发----PL/SQL基础知识章节目标了解/的基本概念•了解PL/SQL的基本概念•掌握PL/SQL块的基本组成区分/变量和非/变量•区分PL/SQL变量和非PL/SQL变量•掌握如何声明变量•掌握如何对变量进行赋值•掌握%TYPE的使用理解在/SQ中SQ语句的作用•理解在PL/SQL中SQL语句的作用本章主要内容知识点掌握程度难易程度项目介绍介绍背景项目了解为什么使用PL/SQL 什么是PL/SQL 理解PL/SQL的优点了解PL/SQL结构块类型了解理解块结构变量声明语法掌握数据类型:标量类型掌握数据类型:复合类型了解数据类型外部变量数据类型:外部变量了解变量赋值掌握函数及注释注释掌握PL/SQL函数的应用:有效函数掌握PL/SQL函数的应用:无效函数掌握与Oracle的交互PL/SQL中的SELECT语句掌握PL/SQL中的DML语句掌握PL/SQL中的事务处理语句掌握PL/SQL概述什么是PL/SQL发专用的种程序设计•PL/SQL是由Oracle开发,专用于Oracle的一种程序设计语言PL代表Procedural Language•Procedural Language•SQL代表Structured Query Language•PL/SQL是Oracle数据库对SQL语句的扩展,增加了编程语言的特点•PL/SQL 包含过程化语句和SQL语句数据操作和查询语句被包含在/Q代码的程序单元中•PL/SQL(PL/SQL块),经过逻辑判断、循环等操作完成复杂的功能或者计算.PL/SQL的优点•改善了性能PL/SQL以整个语句块发送给服务器,这个过程在单次调用中完成,降低了网络拥挤。

而如果不使用PL/SQL,每条SQL语句都有单独的传输交互,在网络环境下占用大量的服务器时间,同时导致网络拥挤。

服务器时间同时导致网络拥挤•可重用性PL/SQL能运行在任何ORACLE环境中(不论它的操作系统和平台),在其他ORACLE能够运行的操作系统上无需修改代码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
```
是因为我们在声明变量的时候,数据类型的长度过于窄小导致的。我们可以采用%TYPE的形式来声明变量(并修改上述例子)。
```
declare
v_name varchar2(15) ;
- 简单条件判断
用于执行单一条件判断,如果满足特定条件,则会执行相应操作;如果不满足条件,则退出条件分支语句。简单条件判断是使用if-then语句来完成的。示例如下:
```
declare
v_sal number(6,2);
begin
select sal into v_sal from emp where lower(ename) = lower('&&name') ;
if v_job = 'PRESIDENT' then
update myemp set sal = v_salary + 1000 where empno = &no ;
用于执行最复杂的条件分支操作,当使用多重条件分支时,如果满足第一个条件,则执行第一种操作,如果不满足第一个条件,则检查是否满足第二个条件,如果满足第二个条件,则执行第二种操作;如果不满足第二个条件,则检查是否满足第三个条件,以此类推。多重条件分时是使用if...then..elsif语句来完成的。示例如下:
exception
when no_data_found then
dbms_output.put_line( '没有找到数据' );
end;
```
## 编写控制语句
控制语句主要有分支、循环、顺序控制三种。
# PL/SQL基础
块是PL/SQL的基本程序单元,编写PL/SQL就是编写PL/SQL块。
## PL/SQL块结构
PL/SQL块由三部分组成:定义部分,执行部分,例外处理部分。其中定义部分用于定义常量、变量、游标、例外、复杂数据类型等;执行部分用于实现应用模块功能,该部分包含了要执行的PL/SQL语句和SQL语句;例外部分用于处理执行部分可能出现的运行错误。PL/SQL块的基本结构如下所示
```
复合类型:record、table、varray
参照类型:cursor、object_type
LOB类型:BFILE、BLOB、CLOB、NCLOB
标量类型:注意有boolean、其他一些数据类型(不列出来了)
```
### 定义标量变量
语法:
```
select dname into v_dname from dept where deptno = v_deptno ;
dbms_output.put_line('部门名'|| v_dname ) ;
end ; -- outer 结束
```
- 当然还有子程序
```
子程序中包含:过程、函数、包
```
- 触发器
## 定义并使用变量
编写PL/SQL时 ,如果要临时存储数值,就要定义变量和常量;如果在应用环境和子程序之间传递数据,必须要为子程序指定参数。在定义变量或常量的时候,需要指定对应的数据类型。在编写PL/SQL的时候,可以使用标量(Scalar)类型、复合(Composite)类型、参照(Reference)类型和LOB(Large Object)类型。
v_salary emp.sal%TYPE ;
begin
select ename , sal into v_name , v_salary from emp where empno = &empno ;
dbms_output.put_line( v_name || ' , ' || v_salary );
```
例如:
```
v_ename varchar2(90) ;
v_sal number(6 , 2 ) ;
v_kaka CONSTRANT number(6,3) := 5.5 ;
v_valid Boolean not null default false ;
begin
select ename into v_ename from emp where empno = &no ;
dbms_output.put_line('雇员名:'||v_ename) ;
exception
when no_data_found then
- begin、declare、exception后没有分号
- end后边一定要有分号
```
set serveroutput on
begin
dbms_output.put_line('hello , PL/SQL');
end ;
/
where empno = &no ;
else
update emp set comm = 200
where empno= &no ;
end if;
end;
```
- 多重条件分支
- 命名块
命名块是指具有特定名称标识的PL/SQL块,只不过命名块比匿名块多了<<>>,加以标记。在使用嵌套的时候,可以加上命名块加以区分。
```
<<outer>>
declare
v_deptno number(2);
v_dname varchar2(10) ;
begin
select comm into v_comm from emp
where empno = &&no ;
if v_comm != 0 then
update emp set comm = v_comm + 100
statements ; ]
[else
statements ; ]
end if ;
```
当使用条件分支语句的时候,不仅可以使用if语句进行简单条件判断,而且还可以使用if语句进行二重分支和多重分支判断。注意,elsif 和 endif 可能与其他语言的的语法有所不同,elsif是一个单词,end if 是两个单词。
```
- 二重条件分支
二重条件分支是根据条件来选择两种可能性,当使用二重条件分支的时候,如果满足条件,则执行一组操作;如果不满足条件,则执行另外一组操作。二重条件分支是利用if...then...else 来完成的。示例如下
```
declare
v_comm number(6,2) ;
```
如何使用呢?
```
declare
v_name varchar2(5) ;
begin
select ename into v_name from emp where empno = &empno ;
dbms_output.put_line( v_name );
if v_sal < 2000 then
update emp set sal = v_sal + 200
where lower(ename) = lower('&name');
end if ;
end;
```
declare
/*定义部分——定义常量、变量、游标、复杂数据类型等*/
begin
/*执行部分,用于执行PL/SQL语句和SQL语句*/
exception
/*例外处理部分——处理运行错误*/
end;/* 块结束标记 */
```
声明部分从declare开始,该部分可选;执行部分从begin开始,该部分是必须的;例外部分从exception开始,该部分是可选的,而end是块的结束标记,需要注意的是:
### 条件分支语句
PL/SQL主要提供了三种条件分支语句:
```
if-then
if-then-else
if-then-elsif
```
主要语法如下
```
IF condition then
statements ;
[elsif condition then
```
declare
v_job myemp.job%TYPE ;
v_salary myemp.sal%TYPE ;
begin
select job , sal into v_job , v_salary from myemp where empno = &&no;
identified :[CONSTRANT] datatype [NOT NULL ][:= | DEFAULT expr]
identified :用于指定变量的命称
CONSTRANT :用于指定常量。当定义常量的时候,必须指定它的初始值,并且其数值不能更改
datatype :用于指定变量或常量的数据类型
begin
select avg(sal) into v_avgsal from emp where deptno=&no;
dbms_output.put_line( '平均工资为:' || v_avgsal ) ;
end ;
```
因为该PL/SQL块直接以declare开始,没有给出任何名称,所以认为是匿名块
相关文档
最新文档