第17章 PLSQL概述
PLSQL讲义
第一章:PL/SQL概述一、什么就是PL/SQLORACLE公司发明PL/SQL为了克服SQL语言自身得一些缺陷并为那些要在ORACLE中运行核心业务提供一种完整得解决方案。
PL/SQL具有以下特点●就是一种高度结构化、易读易理解得语言●就是一种标准得、可移植得ORACLE语言,实现了编写一次到处运行●就是一种嵌入式语言,必须在特定得宿主环境内执行,不能编写一个PL/SQL可执行程序●就是一种高性能得、高集成度得数据库语言,如果您使用VB、DELPHI等进行数据库开发,最终您会发现使用PL/SQL将比其她任何语言都跟轻松高效二、改进得执行授权与事物一致性数据库与SQL语言让我们可以紧密地控制对任何个别数据库表得访问与修改,例如可以通过GRANT命令确保只有特定得角色与用户可以对指定得表执行更新操作,另一方面GRANT命令不能确保用户或者应用执行得更新操作能够正确执行,换句话说,数据库不能确保跨越多个表得事物一致性,在业务事务中涉及多个表就是很常见得。
PL/SQL实现紧密地控制与管理能力就是通过执行授权。
我们只就是授权执行某个过程,后者控制对底层数据结构得访问。
从ORACLE8I开始,PL/SQL提供了AUTHID子句,我们可以使用之前描述得定义者权限模型,也可以使用调用者权限模型。
三、PL/SQL结构:SQL整合DeclareI_book_count int;BeginSelect count(*) into i_book_count from books where author like ‘12’;Dbms_output、put_line(‘123’);--改名Update books set author = ‘31’;End;Declare:声明单元Begin:执行单元--:注释出现错误PL/SQL提供了强大得错误处理机制Procedure check_account(account_id_in in accounts、id%type)IsI_balance_remaining number;I_balance_below_minimum exception;I_account_name account、name%type;BeginSelect name into i_account_name from accounts where id = account_id_in;I_balance_remaining := account_balance(account_id_in); If i_balance_remaining < 1000ThenRaise i_balance_below_minimum;End if;ExceptionWhen no_data_foundThen log_error(…、);When i_balance_below_minumumThen log_error(…、);Raise;End;第二章:语言基础2、1、PL/SQL块结构块:最小得有意义得代码单元,一个块就就是一组代码,这个块给出了执行边界,也为变量声明与异常处理提供了作用范围,PL/SQL允许我们创建匿名块与命名块,命名块可以使包、过程、函数、触发器或者对象。
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,分别用于存储输入的字符串和转换后的结果。
PLSQL的使用
PLSQL的使用PL/SQL(Procedural Language/Structured Query Language)是一种扩展的SQL语言,用于Oracle数据库中的存储过程、函数、触发器等对象的编写和管理。
下面是关于PL/SQL的使用的详细介绍。
PL/SQL的优势:1.执行效率高:PL/SQL是在数据库内部执行的,减少了与数据库之间的通信开销,因此执行效率较高。
2.可重用性:PL/SQL支持存储过程和函数的编写,可以将一些常用的操作封装在一个过程或函数中,以便在多个应用程序中重复使用。
3.安全性高:PL/SQL可以通过访问控制机制限制用户对数据库的访问权限,以保证数据的安全性。
4.强大的处理能力:PL/SQL支持循环、条件判断、异常处理等语句的使用,能够处理复杂的业务逻辑和错误情况。
PL/SQL的基本语法:1.DECLARE部分:用于声明变量、游标、异常等对象。
2.BEGIN和END部分:包围了PL/SQL代码的主体部分。
3.EXCEPTION部分:用于处理异常情况。
4.使用“:=”赋值操作符给变量赋值。
5.使用SELECTINTO语句将查询结果赋值给变量。
6.使用IF-THEN-ELSE语句进行条件判断。
7.使用FOR循环可以循环指定的次数。
8.使用WHILE循环可以根据条件进行循环。
9.使用LOOP和EXIT语句进行无限循环。
PL/SQL的常用功能:1.数据库操作:PL/SQL可以执行SQL语句对数据库进行增删改查操作。
通过使用游标可以遍历查询结果集。
2.错误处理:PL/SQL提供了异常处理机制,可以捕获和处理运行时错误,保证程序的稳定性。
3.逻辑控制:PL/SQL支持条件判断和循环语句,可以根据不同的条件执行不同的操作,进行复杂的业务逻辑处理。
4.存储过程和函数:PL/SQL支持存储过程和函数的编写,可以封装一些常用的业务逻辑,并且可以在多个应用程序中重复使用。
5.触发器:PL/SQL可以编写触发器来响应数据库的变化,执行一些自定义的操作。
plsql概要
PL/SQL程序以程序块为基本组成单位按照是否有名称来划分匿名块命名块子程序存储过程函数触发器程序包数据类型标量类型:varchar2 number char bool date timestampLob :BLOB CLOB BFILE属性类型:%type %rowtype record table varrayType name is record (v1 datetype [not null][:=value],v2 datetype [not null][:=value],v3 datetype [not null][:=value])Type name is table of element_type index by binary_integer/plsinterger/varchar2; Type name is varray(size) of element_type详情关注www。
027hpit。
com分支结构:if 条件表达式then语句块end if;if 条件表达式then语句块1else语句块2end if;if 条件表达式then语句块1elsif 条件表达式then语句块2elsif 条件表达式then语句块3elsif 条件表达式then语句块4else语句块5end if;case 条件when 值1 then 语句1;when 值2 then 语句2;else语句3;End case;casewhen 值1 then 语句1;when 值2 then 语句2;else语句3;End case;循环结构Loop循环体Exit whenEnd loop;While 条件loop循环体End loop;For i in begin..end loop循环体End loop;存储过程语法:create【or replace】procedure 过程名【(arg1 mode datatype,arg2 mode datatypeargn mode datatype)】is/as声明部分Begin执行部分Exception异常处理部分End;Mode: in out in outgrant create procedure to 用户名public int say(){}create【or replace】procedure 过程名is….Call 过程名Exec 过程名函数语法:create【or replace】function 函数名【(arg1 mode datatype,arg2 mode datatypeargn mode datatype)】return datatypeis/as声明部分Begin执行部分Exception异常处理部分End;参数的绑定位置传递名称传递=>组合传递程序包调用方式:包名.过程名/函数名语法:包头:Create [or replace] package 包名is/as公共声明部分子程序声明部分end包名;包体:Create [or replace] package body 包名is/as私有声明部分子程序实现部分end包名;详情关注www。
plsql简介
plsql简介⼀、pl/sql 是什么pl/sql(procedural language/sql)是oracle在标准的sql语⾔上的扩展。
pl/sql不仅允许嵌⼊sql语⾔,还可以定义变量和常量,允许使⽤条件语句和循环语句,允许使⽤例外处理各种错误,这样使得它的功能变得更加强⼤。
⼆、为什么要学pl/sql1.提⾼应⽤程序的运⾏性能2.模块化的设计思想(分页的过程,订单的过程,转账的过程。
)3.减少⽹络传输量4.提⾼安全性(sql会包括表名,有时还可能有密码,传输的时候会泄露。
PL/SQL就不会)三、Oracle为什么在PL/SQL developer执⾏很快,⽤c# oracleclient执⾏就慢因为PL/SQL这门语⾔是专门⽤于在各种环境下对Oracle数据库进⾏访问。
由于该语⾔集成于数据库服务器中,所以PL/SQL代码可以对数据进⾏快速⾼效的处理。
⽽c#语⾔是微软的产品,它在连接ORACLE的时候先存到“连接池”中,所以第⼀次会慢点,但是当你的Web程序没有重起的时候,以后的速度就不会慢了。
四、使⽤pl/sql的缺点移植性不好(换数据库就⽤不了)五、pl/sql理解1)、存储过程、函数、触发器是pl/sql编写的2)、存储过程、函数、触发器是存在oracle中的3)、pl/sql是⾮常强⼤的数据库过程语⾔4)、存储过程、函数可以在java中调⽤六、编写⼀个存储过程,该过程可以向某表中添加记录。
1、创建⼀张简单的表CREATE TABLE mytest(username VARCHAR2(30),pwd VARCHAR2(30));2、创建过程(replace:表⽰如果有insert_proc,就替换)CREATE OR REPLACE PROCEDURE insert_proc ISBEGININSERT INTO mytest VALUES('林计钦', '123456');END;/3、如何查看错误信息:show error;注意要在命令窗⼝执⾏4、如何调⽤该过程:exec 过程名(参数值1,参数值2...);eg、exec insert_proc;注意要在命令窗⼝执⾏。
Oracle PLSQL概述
Oracle PL/SQL概述由于SQL只是一种声明式语言,它没有流程控制;也不存在变量,只有表或者列,所以不能将某个SQL语句的执行结果传递给另外一个语句。
为了实现该目的,用户不得不使用一条更复杂的语句。
而且,SQL语句中更没有可以控制程序流程的IF或LOOP语句。
PL/SQL是过程化的结构查询语言(Procedural Language/Structured Query Language),它可以弥补SQL语句的不足。
在PL/SQL中可以通过IF和LOOP语句控制程序的执行流程,并且可以定义变量,以便利用这些变量在语句之间传递数据信息。
PL/SQL是Oracle的专用语言,它是对标准SQL语言的扩展,并且SQL语句可以嵌套在PL/SQL程序代码中,将SQL 的数据处理能力和PL/SQL的过程处理能力结合在一起。
在Oracle数据库内置了PL/SQL处理引擎,常用的开发工具是Oracle附带的SQL*Plus。
实际上,SQL*Plus只是用于将SQL语句或PL/SQL程序发送到数据库,并将处理后的结果显示在屏幕上的工具,并且用户也可以选择其他的工具运算SQL和PL/SQL程序。
PL/SQL程序的基本结构称为块,每一个块都包含了PL/SQL语句和SQL语句。
典型的PL/SQL块的结构如下:[declaredeclareation_statements]beginexecutable_statements[exceptionexception_handing_statements]end;PL/SQL程序块中的每一条语句都必须以分号结束,SQL语句可以是多行的,但分号表示该语句的结束。
一行中可以有多条SQL语句,但是他们之间必须以分号分隔。
PL/SQL程序的注释是由--表示。
从上面的语法规则中可以发现,一个PL/SQL程序块分为三部分:声明部分、执行部分和异常处理部分。
声明部分是可选的,它由关键字DECLARE开始,到BEGIN关键字结束。
PLSQL使用详细介绍
PLSQL使用详细介绍一、PL/SQL的定义PL/SQL(Procedural Language / Structured Query Language),中文名“结构化查询语言/过程语言”,是一种由Oracle Corporation开发的面向专业应用的程序语言。
最早是在Oracle 6.0中推出,随着Oracle数据库的发展,经过Oracle 7.0,Oracle 8.0,Oracle 8i,Oracle 9i,Oracle 10g,Oracle 11g,Oracle 12c的不断升级,PL/SQL也在这些过程中慢慢完善。
PL/SQL是一种面向步骤的查询语言,也是一种声明式语言,也可以把它看成是一种增强版的SQL,它完全兼容SQL,支持所有的SQL命令,它可以写SQL语句,也可以把多个SQL语句封装成一个存储过程(procedure)、函数(function)、触发器(trigger)、包(package)、游标(cursor)等对象,达到控制数据库、数据的收集,处理和分析等目的,从而提高程序的执行效率,给予用户更好的功能服务。
二、PL/SQL的功能1、PL/SQL支持一系列的现代计算机语言的特性,包括:变量声明、条件执行、循环控制、次级处理程序、异常处理(类似C语言)以及更多的其他特性。
这使得PL/SQL能够很容易地编写复杂的程序。
2、PL/SQL能够使用SQL语句实现数据对象的更新和查询。
能够编写出更加复杂和有效的SQL语句,比如视图(view)、存储过程(stored procedure)、触发器(trigger)等,同时也可以使用它进行数据的事务处理(transaction processing)和数据库管理(data base management)。
PLSQL简介
数据库语言和过程语言。
PL/SQL的基本单位叫做一个区段,由三个部分组成:一个申明部分,一个可运行部分,和排除-构建部分。
因为PL/SQL允许混合SQL申明和过程结构,因此可以在将申明发送到甲骨文系统去执行之前使用PL/SQL区段和副程序来组合SQL申明,没有PL/SQL,甲骨文需要就每次处理SQL申明,在网络环境中,这将影响交通流量,而且增加响应时间。
PL/SQL区段只被编译一次并且以可运行的形式储存,以降低响应时间。
背景结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单地调用相应语句来直接取得结果即可。
显然,这种不关注任何实现细节的语言对于开发者来说有着极大的便利。
然而,有些复杂的业务流程要求相应的程序来描述,这种情况下4GL就有些无能为力了。
PL/SQL 的出现正是为了解决这一问题,PL/SQL是一种过程化语言,属于第三代语言,它与C、C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。
本文主要介绍PL/SQL的编程基础,以使入门者对PL/SQL语言有一个总体认识和基本把握。
主要特性PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQL 和PL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求性最高的用户需求。
当您需要某个信息时,它将自动出现,至多单击即可将信息调出。
集成调试器(要求Oracle7.3.4或更高)——该调试器提供您所需要的全部特性:跳入(Step In)、跳过(Step Over)、跳出(Step Out)、异常时停止运行、断点、观察和设置变量、观察全部堆栈等。
基本能够调试任何程序单元(包括触发器和Oracle8对象类型),无需作出任何修改。
PLSQL简介
PL/SQL 的优点 2-1
使一组语句功能形成模块化程序开发 支持 SQL,在 PL/SQL 中可以使用: 数据操纵命令 事务控制命令 游标控制 SQL 函数和 SQL 运算符 Procedure 支持面向对象编程 (OOP),使用过程性语言控制程序结 Begin ProcedureCall 构 SQL Command Oracle … 可移植性,可运行在任何操作系统和平台上的Oralce 数 End 据库 更佳的性能,PL/SQL 经过编译执行
数字数据类型
BINARY_INTEGER
NUMBER
PLS_INTEGER
存储整数,实数和浮点数 存储有符号整数,可使 存储有符号整数,所需存储 NATURAL DECIMAL 空间少于NUMBER类型值 算术计算快速而有效 NATURALLN FLOAT POSITIVE POSITIVEN SIGNTYPE INTEGER REAL
PL/SQL 简介
PL/SQL 是过程语言(Procedural Language)与结构化查询语 言(SQL)结合而成的编程语言 PL/SQL是Oracle数据库对SQL语句的扩展,增加了编程语 言的特点 数据操作和查询语句被包含在PL/SQL代码的过程性单元中, PL/SQL 经过逻辑判断,循环等操作完成复杂的功能或者计算 支持多种数据类型,如大对象和集合类型 可用于创建存储过程,触发器和程序包,给SQL语句的执行 添加程序逻辑 与 Oracle 服务器和 Oracle 工具紧密集成,具备可移植性, 灵活性和安全性
DECLARE – 可选部分 变量,常量,游标,用户定义异常声明 BEGIN – 必要部分 SQL语句 PL/SQL语句 EXCEPTION – 可选部分 程序出现异常时,捕捉异常并处理异常 END; – 必要部分
PLSQL简介.ppt
3
内容
PL/SQL的优点 PL/SQL块基本结构 PL/SQL块声明部分 PL/SQL块可执行部分 PL/SQL注释
4
PL/SQL的优点
在通过网络执行一个SQL语句来访问Oracle数据库时,会将各个语 句都发送到服务器,进行处理,然后执行它们,向用户返回结果 (或一个消息)。每一个SQL语句都最少需要在网络中两次经过 “旅行”,一次是从用户到服务器,另一次是从服务器到用户。这 会产生大量网络数据流量。 在过程语言SQL(Procedure Language SQL,PL/SQL)程序嵌入SQL 语句是取代执行多个SQL语句的另一种方法。PL/SQL扩展了SQL的功 能。具有如下优点:
'||v_title||'is $'||v_newretail); END;
9
基本结构
分析示例: PL/SQL块的声明部分包括一个常量(c_)和三个变量(v_)。 可执行部分使用一个SELECT语句来检索两个不同列(Title和Retail) 的内容,并将这些值存储到(INTO)在声明部分指出的变量中。 注意,在SELECT子句中对Retail列执行力算术运算,以便确定这本书 的新价格。零售价将乘以存储在c_rateincrease变量(它的值实际上 是1.20或者120%)中的数量。 在将储在声明的变量中之后,就可以使用DBMS_OUTPUT程序包(DBMS_ OUTPUT.PUT_LINE)的PUT_LINE函数显示它们。与以前在SQL*Plus中执 行的SELECT命令不同,PL/SQL块在默认情况下不会显示SELECT语句的 结果。 DBMS_OUTPUT是一个包含一组函数的程序包,用户可以应用这 些函数来显示为变量指定的值。 使用DBMS_ OUTPUT.PUT_LINE显示信息之前,需要在SQL>提示符下键入 SET SERVEROUTPUT ON , SERVEROUTPUT 环境变量指出分配一个缓冲 区来存储PL/SQL块的输出。ON可以创建缓冲区。
初步认识 PLSQL
初步认识PL/SQL1. PL/SQL 简介从学习数据库到现在,在数据库上一直使用单一的SQL 语句进行数据操作,没有流程控制。
无法开发复杂的应用。
Oacle PL/SQL 语言(Procedural Language/SQL) 是结合了结构构化查询与oacle 自身过程控制为一体的强大语言,PL/SQL 不但支持更多的数据类型,拥有自身的变量声明、赋值语句,而且还有条件、循环等流程控制语句。
过程控利结构与SQL数据处理能力无缝的结合形成了强大的编程语言,可以创建过程和函数以及程序包。
PL/SQL 是一种块结构的语言,它将一组语句放在一个块中,一次性发送给服务器,PL/SQL引擎分析收到PL/SQL 语句块中的内容进行,把其中的过程控制语句由PL/SQL引擎自身去执行,把PL/SQL块中的SQL 语句交给服务器的SQL 语句执行器执行。
如图所示:PL/SQL 块发送给服务器后。
先被编译然后执行,对于有名称的PL/SQL 块(比如下一章讲解的子程序) 可以单独编译,永久的存储在数据库中,随时准备执行。
PL/SQL 的优点还有:> 支持SQLSQL 是访问数据库的标准语言,通过SQL 命令,用户可以操纵数据库中的数据。
PL/SQL支持所有的SQL 数据操纵命令、游标控制命令、事务控制命令、SQL 函数、运算符和伪列。
同时PL/SQL和SQL 诺言紧密集成,PL/SQL支持所有的SQL 数据类型和NULL 值。
> 支持面向对象编程PL/SQL支持面向对象的编程,在PL/SQL 中可以创建类型,可以对类型进行继承,可以在子程序中重载方法等。
> 更好的性能SQL 是非过程语言,只能一条一条执行,而PL/SQL 把一个PL/SQL 块统一进行编译后执行,同时还可以把编译好的PL/SQL 块存储起来,以备重用,减少了应用程序和服务器之间的通信时间,PL/SQL是快速而高效的。
> 可移植性使用PL/SQL编写的应用程序,可以移植到任何操作系统平台上的oracle 服务器,同时还可以编写可移植程序库,在不同环境中重用。
PLsql简介
PL/SQLPL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。
PL/SQL是Oracle数据库对SQL语句的扩展。
在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。
目录1 PL/SQL基本概念PL/SQL是Oracle对关系数据库语言SQL的过程化扩充,它将数据库技术和过程化程序设计语言联系起来,是一种应用开发语言,可使用循环,分支处理数据,将SQL的数据操纵功能与过程化语言数据处理功能结合起来. PL/SQL的使用,使SQL成为一种高级程序设计语言,支持高级语言的块操作,条件判断,循环语句,嵌套等,与数据库核心的数据类型集成,使SQL 的程序设计效率更高.1.1 PL/SQL的作用使用PL/SQL可以编写具有很多高级功能的程序,虽然通过多个SQL语句可能也能实现同样的功能,但是相比而言,PL/SQL具有更为明显的一些优点:1.能够使一组SQL语句的功能更具模块化程序特点;2.采用了过程性语言控制程序的结构;3.可以对程序中的错误进行自动处理,使程序能够在遇到错误的时候不会被中断;4.具有较好的可移植性,可以移植到另一个Oracle数据库中;5.集成在数据库中,调用更快;6.减少了网络的交互,有助于提高程序性能。
通过多条SQL语句实现功能时,每条语句都需要在客户端和服务端传递,而且每条语句的执行结果也需要在网络中进行交互,占用了大量的网络带宽,消耗了大量网络传递的时间,而在网络中传输的那些结果,往往都是中间结果,而不是我们所关心的。
而使用PL/SQL程序是因为程序代码存储在数据库中,程序的分析和执行完全在数据库内部进行,用户所需要做的就是在客户端发出调用PL/SQL的执行命令,数据库接收到执行命令后,在数据库内部完成整个PL/SQL程序的执行,并将最终的执行结果返馈给用户。
PLSQL
(2) %ROWTYPE 可以使用%ROWTYPE属性声明描述表的行数据的记录,对于用户定 义的记 录,必须声明自己的域。记录包含唯一的命名域,具有不同的数据 类型。 DECLARE TYPE TimeRec IS RECORD(HH number(2),MM number(2)); TYPE MeetingTyp IS RECORD ( Meeting_Date date, Meeting_Time TimeRec, Meeting_Addr varchar2(20), Meeting_Purpose varchar2(50) )
IF-THEN语句可以嵌套使用
例:判断计算机系总学分>40的人数是否超过80人。
DECLARE v_num number(3); BEGIN SELECT COUNT(*) INTO v_num FROM xs WHERE zxf>40 AND zym=’计算机’; IF v_num<>0 THEN IF v_num>80 THEN dbms_output.put_line(‘计算机系总学分>40的 人数超过80人’); END IF; END IF; END;
4.2.2 常量与变量
1.变量
2、常量 3、有效字符集
• • • • • • •
1、变量 (1)声明变量 声明变量的语句格式如下: Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression] 即 <变量名><数据类型>[(宽度) not null :=<初始值>];
2、块的命名和匿名
3、块的执行
• 1. 块结构 • PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑 块,一个PL/SQL 程序包含了一个或多个逻辑块,每个块都可以 划分为三个部分。 • (1)块的三个部分 • ①声明部分(Declaration section) • 声明部分包含了变量和常量的数据类型和初始值。这个部分是由 关键字DECLARE开始,如果不需要声明变量或常量,那么可以 忽略这一部分。 • ②执行部分(Executable section) • 执行部分是PL/SQL块中的指令部分,由关键字BEGIN开始,所有 的可执行语句都放在这一部分,其他的PL/SQL块也可以放在这一 部分。 • ③异常处理部分(Exception section) • 这一部分是可选的,在这一部分中处理异常或错误,对异常处理 的详细讨论在后面进行。
plsql语言简介
演示 创建函数查找指定ID的员工信息
4 游标基本操作
在通过游标对表的行数据进行处理的操作过程,主要 包括以下四步:声明游标、打开游标、提取数据和关闭 游标。
1.声明游标 声明游标就是声明变量,使变量成为指定的PL/SQL控制结构。 声明游标的语法格式如下所示: CURSOR 游标名 IS SELECT语句
PL/SQL的数据类型 1 基本数据类型
类型标识符 说明 例子
Number(n)
Int Char(n) Varchar2(n) Long Date
n位数字
整型数 定长字符型,n位字符。 最大255个字符 变长字符型,n位字符。 最大2000个字符 变长字符型,最长2GB 日期型
Sal Number(5);
其中最后一行的“/”是在SQL *Plus环境中用于执行程序块的指令,“--”用于行注释,“/* */”用于块注释。
执行SQL>set serveroutput on
2 PL/SQL块的组成与应用
DECLARE xm varchar2(8):=’张琼’; zym varchar2(10):=’计算机’; zxf number(2):=45;
使用%TYPE
在PL/SQL程序中,由于常需要把表中的数据读取 到指定的变量中,为了使变量的数据类型和表中的对 应列的数据类型一致,可以直接通过%TYPE引用表中 指定列的数据类型,这样一旦表中指定列的数据类型 被修改,则在程序执行时,将自动引用新的对应数据 类型, 使用%TYPE常常是用在声明变量时,使用的 语法格式如下所示: 变量名 表名.列名%TYPE;
表5.6自定义类型student_num
表5.7表XS中学号字段的重新设计
1、PLSQL的概念
SQL*Plus中使用PL/SQL 15-3
• 替代变量
– PL/SQL并不是独立的编程语言,只是Oracle编程环 境的一个工具。因此,它不具备从用户接收输入的 能力。但是,在SQL *Plus中,借助于替代变量, PL/SQL语句块可以接收输入信息。替代变量不能用 于输出值,因为没有给它们分配任何存储空间。在 PL/SQL语句块发送到数据库之前, SQL *Plus会使用 实际值来替换这些替代变量。替代变量的前缀是& 或者&& – 示例2:在PL/SQL块中使用替代变量接收用户输入
PL/SQL语句块结构 2-2
• PL/SQL语句块包含3个部分:声明部分、可执行部分 以及异常处理部分。可执行部分是语句块中唯一要 求必须存在的部分。声明部分和异常处理部分是可 选的。PL/SQL语句块的结构通常如下所示:
[ DECLARE ] [ Declaration statements ] BEGIN Executable statements [ EXCEPTION ] [ Exception-handling statements ] END;
– 这是某匿名PL/SQL语句块的声明部分。首先是保留字 DECLARE,包含2个变量声明和1个常量声明。变量名v_ first_name和v_last_name的后面是数据类型和大小。常量名 c_counter的后面是保留字CONSTANT、数据类型以及所赋的 值。注意,每个声明语句后面都有一个分号
异常处理部分 3-2
• BEGIN • SELECT first_name, last_name • INTO v_first_name, v_last_name • FROM student • WHERE student_id = 123; • • DBMS_OUTPUT.PUT_LINE ('Student name: '||v_first_name||' '||v_last_name); • EXCEPTION • WHEN NO_DATA_FOUND THEN • DBMS_OUTPUT.PUT_LINE ('There is no student with '||-'student id 123'); • END;
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标量数据类型:标量变量是指只能存储单个数值的变量。
Oracle PLSQL从入门到精通 第17章
INSERT INTO employees (employee_id, last_name, first_name, email, hire_date, job_id,
salary, department_id) VALUES (300, 'Smith', 'Rob', 'RSMITH', SYSDATE,
2019/11/29
———— 不可不求,也不可强求 ————
14
使用 OLD 和 NEW 操作符
CREATE OR REPLACE TRIGGER audit_emp_values AFTER DELETE OR INSERT OR UPDATE ON employees FOR EACH ROW BEGIN
3. 执行所有的AFTER STATEMENT (语句)触发器
注意: 完整性约束的操作可能被延迟到COMMIT 时才执行
2019/11/29
———— 不可不求,也不可强求 ————
18
以触发器实现完整性约束
UPDATE employees SET department_id = 999 WHERE employee_id = 170;
UPDATE employees SET salary = 7000, last_name = 'Smith' WHERE employee_id = 999;
SELECT user_name, timestamp, ... FROM audit_emp;
2019/11/29
———— 不可不求,也不可强求 ————
每当一个特定的事件发生时隐含地执行 可以是如下的一种:
PLSQL简介
PLSQL简介1.1 PL/SQL简介PL/SQL是ORACLE的过程化语⾔,包括⼀整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执⾏SQL语句,SQL语句中也可以使⽤PL/SQL函数。
1.2 创建PL/SQL程序块DECLARE…BEGIN…EXCEPTIONEND;1.3 PL/SQL数据类型名称类型说明NUMBER数字型能存放整数值和实数值,并且可以定义精度和取值范围BINARY_INTEGER数字型可存储带符号整数,为整数计算优化性能DEC数字型NUMBER的⼦类型,⼩数DOUBLE PRECISION数字型NUMBER的⼦类型,⾼精度实数INTEGER数字型NUMBER的⼦类型,整数INT数字型NUMBER的⼦类型,整数NUMERIC数字型NUMBER的⼦类型,与NUMBER等价REAL数字型NUMBER的⼦类型,与NUMBER等价SMALLINT数字型NUMBER的⼦类型,取值范围⽐INTEGER⼩VARCHAR2字符型存放可变长字符串,有最⼤长度CHAR字符型定长字符串LONG字符型变长字符串,最⼤长度可达32,767DATE⽇期型以数据库相同的格式存放⽇期值BOOLEAN布尔型TRUE OR FALSEROWID ROWID存放数据库的⾏号例⼦:DECLAREORDER_NO NUMBER(3);CUST_NAME VARCHAR2(20);ORDER_DATE DATE;EMP_NO INTEGER:=25;PI CONSTANT NUMBER:=3.1416;BEGINNULL;END;1.4 处理PL/SQL的异常1.4.1 PL/SQL的异常例如:DECLAREX NUMBER;BEGINX:= 'yyyy';--Error HereEXCEPTION WHEN VALUE_ERROR THENDBMS_OUTPUT.PUT_LINE('EXCEPTION HANDED');END;实现技术:EXCEPTION WHEN first_exception THEN…WHEN second_exception THEN…WHEN OTHERS THEN/*THERS异常处理器必须排在最后,它处理所有没有明确列出的异常。
PLSQL语法以及程序编写介绍
PLSQL语法以及程序编写介绍
PL/SQL语法介绍
PL/SQL是一种基于Oracle数据库开发的专用程序设计语言。
它是一种非常强大的程序开发语言,可以对SQL语句进行封装和定义,可以从有限的程序开发语言创建功能强大的程序,可以完成一些特殊的任务,可以为Oracle数据库应用程序提供性能改进和维护。
PL/SQL语法由三个主要部分组成:名称、控制结构和声明。
PL/SQL语句可以是SQL语句(简单SQL或复杂SQL)、存储过程(简单或复杂)等。
1.名称:
PL/SQL的名称包括数据库名称、用户名、表名、字段名、变量名、存储过程名、触发器名、索引名、约束名以及函数名等。
2.控制结构:
PL/SQL控制结构由if、if…else、case、loop、exit、for loop等构成,它们可以按照设定的条件执行、跳转、变化等分支控制。
它们根据程序的要求定义和执行在多次执行情况下执行的代码。
PL/SQL声明包括变量声明、常量声明、异常声明以及游标声明等。
变量声明用于存储和传递数据,而常量声明可以用作常数,比如文本、数字以及数据类型。
异常声明用于捕获和处理在特定情况下产生的异常,而游标声明可以用来识别和访问数据库中的特定记录。
PL/SQL程序编写时,应该按照以下步骤进行:
1、设计程序
在开始编写之前。
第17章 PLSQL概述
-- 学生姓名
17.2
一个PL/SQL的例子 一个PL/SQL的例子 PL/SQL
DBMS_OUTPUT.PUT_LINE (‘学生姓名为’|| 学生姓名为’ 学生姓名为 v_stuName); -- 显示学生姓名 EXCEPTION WHEN NO_DATA_FOUND THEN -- 异常处理 DBMS_OUTPUT.PUT_LINE (‘学生编号不存在’) -学生编号不存在’ 学生编号不存在 显示错误信息 INSERT INTO t_ log (information,sysdate,user) -- 将 错误信息写入日志文件 VALUES(‘stuID does not exist!’ ,SYSDATE, 'admin'); END;
什么是PL/SQL 17.1.1 什么是PL/SQL
PL/SQL语言中的 的英文全称是Procedural Language, 语言中的PL的英文全称是 , 语言中的 的英文全称是 顾名思义,作为对SQL语言的扩展,PL/SQL语言增加了许多 语言的扩展, 顾名思义,作为对 语言的扩展 语言增加了许多 程序设计语言中的过程结构。主要包括以下几个方面的扩展。 程序设计语言中的过程结构。主要包括以下几个方面的扩展。 变量。例如,变量声明、 变量。例如,变量声明、变量初始化等 数据类型。例如,标量类型、复合类型、引用类型、对象 数据类型。例如,标量类型、复合类型、引用类型、 类型、 类型、用户自定义类型等 结构控制语句,例如,条件语句IF-ELSE-THEN、CASE 结构控制语句,例如,条件语句 、 和循环语句LOOP、WHILE等。 和循环语句 、 等 过程和函数。在数据库中以编译好的形式存储, 过程和函数。在数据库中以编译好的形式存储,供其他的 语句块调用。 语句块调用。 异常处理。用来处理程序运行时出现的错误, 异常处理。用来处理程序运行时出现的错误,将程序逻辑 处理代码与错误处理代码分离。 处理代码与错误处理代码分离。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
17.1.2
为什么要使用PL/SQL
那么使用PL/SQL可以完成上面的这个业务逻辑吗。答 案是肯定的。因为PL/SQL语言作为对SQL语言的扩展,提 供了像条件判断、循环判断这样的结构控制语句,因此类似 与上面的问题(甚至比上面的问题还复杂的问题)可以很容 易的用PL/SQL语言来解决。其实现的主要代码如下所示。 DECLARE v_ teaID VARCHAR2(15) := 't152303'; v_ teaName VARCHAR2(10):= '王杰'; v_age NUMBER(2) :=45; v_ dept VARCHAR2 (20) :=’计算机系’;
17.1.1
什么是PL/SQL
PL/SQL语言中的PL的英文全称是Procedural Language, 顾名思义,作为对SQL语言的扩展,PL/SQL语言增加了许多 程序设计语言中的过程结构。主要包括以下几个方面的扩展。 变量。例如,变量声明、变量初始化等 数据类型。例如,标量类型、复合类型、引用类型、对象 类型、用户自定义类型等 结构控制语句,例如,条件语句IF-ELSE-THEN、CASE 和循环语句LOOP、WHILE等。 过程和函数。在数据库中以编译好的形式存储,供其他的 语句块调用。 异常处理。用来处理程序运行时出现的错误,将程序逻辑 处理代码与错误处理代码分离。
17.4.1
TOAD
TOAD是一个强大、低开销的PL/SQL开发工具,它只 需占用很少的内存,可以满足管理、开发、性能调优等要求 ,是Oracle开发者常用的工具之一。
17.4.2
Navicat
Navicat是由Quest Software公司出品的数据库管理工具 ,支持PL/SQL的调试,可以自动格式化PL/SQL语句,还可 以进行数据同步和批处理管理、支持向导的导入和导出、日 程备份等功能。
-- 学生姓名
17.2
一个PL/SQL的例子
DBMS_OUTPUT.PUT_LINE (‘学生姓名为’|| v_stuName); -- 显示学生姓名 EXCEPTION WHEN NO_DATA_FOUND THEN -- 异常处理 DBMS_OUTPUT.PUT_LINE (‘学生编号不存在’) -显示错误信息 INSERT INTO t_ log (information,sysdate,user) -- 将 错误信息写入日志文件 VALUES(‘stuID does not exist!’ ,SYSDATE, 'admin'); END;
17.3.3
字母大小写
数据类型需要大写。例如,INT、VARCHAR2等。 数据库对象使用小写字母。例如,teacher、student等
。 变量和参数使用小写字母。例如,v_stuID、 stul_record等
17.3.4
代码缩进格式
代码格式。为了使程序更容易阅读和理解,一般在一 段代码中都会使用制表符(“Tab”键)对代码进行缩进。
17.4.3
PL/SQL Developer
PL/SQL Developer是一个专门用于Oracle数据库 PL/SQL的程序编写与调试程序的集成开发环境,其安装使 用非常简单,可以方便的对Oracle数据库PL/SQL的程序进 行编辑、编译、测试、调试以及性能优化,是Oracle开发者 常用的工具之一。
17.3.2
标识符命名
要为变量起有意义的名字。也就是说,通过变量名可 以让阅读程序的人知道这个变量是用来做什么的。例如,如 果要定义一个学生编号的变量,那么v_stuID的变量名就要 比a 的变量名更有意义。
17.3.3
字母大小写
虽然PL/SQL语言不区分大小写,但是在程序中适当区 分字母的大小还是有利于程序的可读性。因此在使用 PL/SQL语言时字母的大小写可以遵循以下的规则。 PL/SQL语言关键字需要大写。例如,DECLAR、 BEGIN等。 SQL语言中的关键字需要大写。例如,SELECT、 WHERE、INSERT、UPDATE等。 SQL语言中内置函数需要大写。例如,ROUND()、 TO_DATE()、 LENGTH()等。
17.4
PL/SQL开发工具简介
Oracle公司和许多第三方供应商都提供了许多不同的 PL/SQL开发工具。其中主要的PL/SQL开发工具包括 SQL*Plus、TOAD、Navicat和PL/SQL Developer。其中, SQL*Plus是和Oracle服务器集成在一起的,是Oracle安装的 一部分。它是最简单的PL/SQL开发工具。在提示行中输入 PL/SQL语句块会直接发送给数据库,执行后的结果会返回 到屏幕上。本节主要介绍除SQL*Plus以外的其他三种 PL/SQL开发工具。
17.3
PL/Sቤተ መጻሕፍቲ ባይዱL编写规范
PL/SQL语言是作为一种高级的数据库程序设计语言, 在编写时也应该遵循一定的编写规范。良好的程序编写规范 不仅可以让其程序更容易阅读和理解,而且也有利于以后程 序代码的维护。这一节就来介绍编写PL/SQL语言中常用的 一些编程规范。
17.3.1
代码注释
在实际应用中,无论用任何一种程序设计语言编写的 代码都不能没有注释。在PL/SQL的代码中,一般需要在三 个地方为其添加注释。 每一个PL/SQL语句块或者过程的开始部分。用于说明 这个PL/SQL语句块或者过程是用来干什么的。 每一个变量声明的后面。用于说明该变量所表示的意 义。 PL/SQL语句块或者过程中的主要业务逻辑的处理部分 。用于说明该段处理程序的作用以及可能产生的结果。
17.3.2
标识符命名
作为程序设计语言,在实际应用中都会使用标识符命 名变量、常量等,在PL/SQL语言中,标识符名称字符长度 最大不能超过30个字符,并且需要以字母开头,除此之外对 于标识符命名时最好遵循以下的规则。 以v_开头定义变量。例如,v_stuID、v_stuName等。 以c_开头定义常量。例如,c_constantNumber 以e_开头定义用户自定义异常。例如,e_illegalValue 以t_开头定义用户自定义类型变量。例如 t_userDefinedType 以cursor_做前缀定义游标。例如cursor_student 以_record做后缀定义一个记录。例如,stu_record
17.1.2
为什么要使用PL/SQL
v_ profession VARCHAR2 (10) :=’教授’; v_ salsry NUMBER(6,2) :=5000; BEGIN UPDATE t_ teacher SET profession =v_ profession WHERE teaID = v_ teaID; IF SQL%NOTFOUNDTHEN INSERT INTO T_student VALUES(v_ teaID, v_ teaName, v_age, v_ dept, v_ profession, v_ salsry); END IF; END;
17.2
一个PL/SQL的例子
DECLARE v_stuName VARCHAR (10); BEGIN /* *通过学生编号从学生信息表中 *取得对应的学生姓名信息 */ SELECT v_stuName INTO v_stuName FROM t_student WHERE stuID = &stuID;
17.1.2
为什么要使用PL/SQL
前面章节中介绍SQL语言时,已经知道,使用SQL可 以很灵活的操作数据库,实现数据表(或者视图)的创建、 数据的查询、增加、修改、删除、表结构的修改、权限的授 予与回收等操作,那么为什么要使用PL/SQL语言呢。 在实际的应用中,有些时候需要处理的业务逻辑可能 会比较复杂。现在考虑这样一个问题,一所学校要对某一名 教师的职称进行修改,如果这个教师不存在,就向教师信息 表中插入一条该教师的记录;如果这个教师存在,就在教师 信息表中修改这名教师的职称信息。对于这个问题,如果仅 使用SQL语言是无法来完成的,因为在SQL语言中,并没有 提供用于判断的语句命令。
17.2
一个PL/SQL的例子
为了让读者能够了解PL/SQL语句块的基本组成,这里 给出一个使用PL/SQL语言完成查询学生信息表(t_student )中指定学生编号对应的学生姓名的例子。在该例中,如果 输入的学生编号在学生信息表中存在,则将该教师的信息输 出出来,如果输入的学生编号在学生信息表中不存在,则显 示“学生编号不存在”的错误信息,并将该信息写入到日志 表(t_ log)中,其代码如下:
17.1
PL/SQL介绍
PL/SQL作为一种可以运行在任何Oracle平台中的较为 复杂的程序设计语言,在实际的开发应用中得到了广泛的应 用。这一节将对PL/SQL做一个总结性的介绍,并结合一个 实例讲解为什么要在程序应用中使用PL/SQL。
17.1.1
什么是PL/SQL
PL/SQL的英文全称为Procedural Language/SQL,它 是Oracle对标准数据库SQL语言的扩展,它可以运行在任何 的Oracle开发环境中。Oracle公司已经将PL/SQL语言集成 到Oracle的服务器中,也可以在由其他的第三方提供的工具 中使用PL/SQL。 PL/SQL语言是一种比较复杂的数据库程序设计语言, 它将第四代语言(如SQL)的灵活性与第三代语言(如C、 COBOL、C++、Java等)的过程性结构结合在一起,很好 的融合了SQL语言中强大的数据库操作性以及程序设计语言 中的过程结构。因此,PL/SQL语言的功能强大,可以用它 来解决数据库应用中复杂的应用程序。目前,很多的开发人 员和数据库管理人员(DBA)在实际应用中都开始使用 PL/SQL语言。
第17章
SQL2008 PL/SQL概述
PL/SQL(Procedural Language/SQL)是Oracle对标准 数据库SQL语言的扩展。在PL/SQL中,不仅可以使用SQL 语句,而且还可以在PL/SQL语句中定义变量和常量、使用 条件分支和循环控制语句、可以进行异常处理、可以使用游 标进行数据操作等。在任何运行Oracle的平台中,都可以使 用PL/SQL进行应用程序的开发。这一节章来介绍PL/SQL的 一些基本内容。 什么是PL/SQL 使用PL/SQL的原因 介绍一个简单的PL/SQL例子 PL/SQL开发工具简介 PL/SQL的编写规范