PLSQL学习(一) 基础知识

合集下载

《PLSQL经典教程》课件

《PLSQL经典教程》课件

PLSQL变量与常量
了解如何定义和使用变量以及常量,实现 数据存储和常量值的复用。
PLSQL条件语句
学习使用条件语句(IF-THEN, IF-THEN-ELSE, IF-THEN-ELSIF)控制程序的执行流程。
PLSQL循环语句
掌握使用循环语句(LOOP, WHILE, FOR) 实现重复执行某一段代码的功能。
《PLSQL经典教程》PPT课 件
本课程旨在介绍PLSQL编程的基础知识和技能。通过本课程,您将全面了解 PLSQL语言的特点和高级应用,提升自己的编程能力。
简介
本课程为PLSQL经典教程PPT课件,旨在介绍PLSQL编程基础知识和技能。
第一章:PLSQL基础
PLSQL简介
PLSQL是Oracle数据库的编程语言,具有丰 富的数据处理和逻辑控制功能。
强制执行。
结束语
感谢您的耐心学习!希望本课程能对您的PLSQL编程有所帮助。
第二章:PLSQL高级应用
1
PLSQL异常处理
学习如何编写异常处理程序以及如
PLSQL游标
2
何定义和抛出异常。
了解如何定义、使用和操作游标,
处理和管理查询结果集。来自3PLSQL存储过程
学习如何定义和使用存储过程,提
PLSQL触发器
4
高编程的模块化和代码复用性。
掌握如何定义和使用触发器,实现 数据库操作的自动化和业务规则的

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系列培训之一:基本语法第一讲分四个部分:SQL基本语法、基本逻辑控制、事务和异常SQL基本语法SQL分类数据定义语言DDL:CREATE/DROP/ALTER/COMMENT/TRUNCATE等数据操作语言DML:UPDA TE/DELETE/INSERT/CALL/SELECT FOR UPDA TE等数据控制语言DCL:GRANT/REVOKE/COMMIT/ROLLBACK等SELECT FOR UPDATESELECT FOR UPDA TE锁住某个表的相关行。

如果是多表查询:SELECT FOR UPDA TE of table.column----用来表连接时锁住其中一个表的相关行;----否则将锁住所有表(包括from子查询,不包括条件子查询)的相关行举例:SELECT t1.id, FROM test_table1 t1, test_table2 t2WHERE t1.id = t2.idFOR UPDA TE of t1.idLOCK TABLELOCK TABLE table_name IN lockmode MODE (NOWAIT)LOCK TABLE tanjie21 IN SHARE UPDATE MODE; --同下LOCK TABLE tanjie21 IN ROW SHARE MODE; --行共享锁,其他会话无法获得排他锁LOCK TABLE tanjie22 IN ROW EXCLUSIVE MODE; --行排他锁,禁止SHARE锁定--UPDATE/DELETE/INSERT自动获得LOCK TABLE tanjie23 IN SHARE MODE; --表共享锁LOCK TABLE tanjie24 IN EXCLUSIVE MODE; --表排他锁LOCK TABLE tanjie25 IN SHARE ROW EXCLUSIVE MODE; --表级共享行级排他W AIT/NOW AITNOWAIT --报ora-00054WAIT integer(秒) --报ora-30006EXECUTE IMMEDIATE处理动态SQL的两种方式:(1)EXECUTE IMMEDIA TE(2)OPEN-FOR, FETCH, and CLOSE性能优化(以后再讲):BULK EXECUTE IMMEDIA TEEXECUTE IMMEDIA TE的完整语法:EXECUTE IMMEDIATE dynamic_SQL_string[INTO defined_variable1, defined_variable2, ...][USING [IN | OUT | IN OUT] bind_argument1, bind_argument2, ...] [RETURNING INTO | RETURN bind_argument1, bind_argument2, ...]使用INTO子句确定返回的是单行查询结果(与SELECT INTO类似)SUB QUERY标准子查询:和主查询没有直接联系,在ORACLE中首先执行且只执行一次关联子查询:在执行过程中需要与主查询发生联系,如子查询的条件依赖于主查询传递的条件。

PLSQL学习笔记

PLSQL学习笔记

(五)权限控制语句(DCL):GRANT 授予权限 /REVOKE 移除权限
SELECT:
SELECT 查询列表 FROM 数据源;
*&* SQL命令必须加分号。
ALTER USER HR IDENTIFIED BY HR ACCOUNT UNLOCK;
修改用户 解锁
给HR解锁
主要用于通配固定位数的字符。例如查询月收入五位数以上的员工。五位ห้องสมุดไป่ตู้可以用'_'来查询。
逻辑操作符(用在WHERE子句中)
AND
OR
NOT
先执行 NOT ,再执行 AND 最后执行 OR。
ORDER BY
ORDER BY子句在 SELECT 语句的最后。
ASC:升序
(三)事务控制语句:COMMIT 提交、ROLLBACK 回滚、
SAVEPOINT 存储点(与 ROLLBACK 搭配使用)在回滚的时候可以回滚到某个存储点上。否则回滚到最初起点上。
(四)数据定义语句:对对象操作。TRUNCATE 清除表中所有数据 /CREATE 创建 /DROP 删除 /ALTER 修改
定义空(NULL)值
空值出现在表达式中会导致整个表达式的值为空。
NVL(字段名,将要赋予的值)函数
作用:将空值转换成其他有ASCLL码的值。
annual_salary年薪
别名
可以加中文的字段别名。
如果想强制地改变列名的大小写,可以在别名的定义时加上双引号,列名有空格时也要在列名上加双引号。
以上函数都是返回string的一部分,从字符位置A开始,长为B个字符。如果A是0,那它就被认为是1(字符串的开始位置)。如果A是正数,那么字符从左边开始数。如果是负数,则从STRING的末尾开始,从右边数。如果B不存在,那么缺省是整个字符串。如果B小于1,将返回NULL。如果A或B使用了浮点数,那么该数值首先被节取成一个整数,返回类型与STRING相同。

第一章 plsql介绍标准版文档

第一章 plsql介绍标准版文档
SELECT first_name,last_name,major into v_Student FROM students WHERE id=10000;
End; (select语句中的列顺序与在记录变量中的字段顺序一致)
• %TYPE和%ROWTYPE
使用%TYPE属性
%type用于变量类型的声明中。也可以用于保证定义的变量 的数据类型和长度与数据库表中的列保持一致。
声明变量的语法: 变量名 类型〔constant〕[not null] [:=value];
注意:在声明部分,每一行只能有一个变量声明,如以下的 声明是错误的:
Declare v_firstname , v_lastname varchar2(20);
正确的声明为: Declare
v_firstname varchar2(20);
声明变量必须提供变量名称和数据类型。
变量名称遵循以下约定:
(1)以一个字母字符开头
(2)最多包含30个字符
(3)可以包含大写和小写字母、数字以及_、$、# 及其它特殊字符。
(1)PL/SQL的基本数据类型
BINARY_INTEGER NUMBER[(precision,scale)] CHAR[(maximum_length)] LONG LONG RAW VARCHAR2(maximum_length) DATE BOOLEAN
PL/SQL的复合数据类型 标量变量非常有用,但很多时候,需要处理逻辑的数据组,
于是PL/SQL提供了复合的数据类型,允许创建一个变量,可以 将不同数据类型的多个值存储为一个单独的单元。 把复合数据类型分为两种: (1)复合数据类型:主要是记录数据类型和记录表类型 (2)集合数据类型:主要是按索引组织表类型、嵌套表类型和 数组类型。

PLSQL(1)

PLSQL(1)

PLSQL培训一、PLSQL简介PLSQL是ORACLE公司对SQL的一个扩展,也就相当于微软所扩展的TSQL一样。

它是一种过程化的语言,包括一整套的数据类型、条件结构、循环结构和异常处理结构,PLSQL可以执行SQL语句,SQL语句中也可以使用PLSQL函数。

二、PLSQL的数据类型只列出我们使用的VARCHAR2:可变长度字符串;注意:VARCHAR2 定义的长度为字节长度INT(INTEGER):整数;NUMERIC(M,N):小数;DATE:日期;BOOLEAN:布尔数。

Type:记录类型。

三、PLSQL DEV的使用。

四、PLSQL重要的一个组成:块DECLARE …;BEGIN…END;DECLARE :为声明部分,主要是声明这个块中用的变量,例:DECLARE V_CNT INT;该示例声明(或者说定义)了一个V_CNT的整形变量,与TSQL变量区别是变量名无需以@开头。

给变量赋值:V_CNT := 1;注1:赋值时候可以像程序语言一样直接赋值,赋值符号为:=;注2:在声明时候可以赋默认值,有如下两种方式:DECLARE V_CNT1 INT:=1; V_CNT2 INT DEFAULT2;注 3:另外一种赋值方式(如果是对一个变量直接赋一个静态值不要采取这种方式) DECLARE V_CNT INT;BEGINSELECT COUNT(*)INTO V_CNT FROM USER_TABLES;DBMS_OUTPUT.PUT_LINE(V_CNT);END;块中可以包含子块,类似于在程序语言中的一个函数体内部嵌入一个子函数体,而在子块中可以定义和父块中相同的变量名,在此,变量作用域与其他编程语言类似,子域中的变量覆盖父域中的变量。

块也可以加上名称,变为有名块。

BEGIN<<BLOCK1>>DECLARE V_CNT INT;BEGINV_CNT:=1;BEGIN <<BLOCK2>>DECLARE V_CNT INT;BEGINDBMS_OUTPUT.PUT_LINE(V_CNT);V_CNT:= 2;END;END;DBMS_OUTPUT.PUT_LINE(V_CNT);END;END;注:红色部分为子块,若需要引用父块中的变量,可以按如下方式引用父块名.变量名存储过程,函数都可以理解为一个指定了名字的块。

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基础
触发器(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) 这一部分是可选的, 在这一部分中处理异常或错误。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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;
declare
v_date date;
begin
for i in1.. 10loop
:x := i;
select sysdate+:x into v_date from dual;
dbms_output.put_line(v_date);
end loop;
end;
/
在execute immediate中的应用:
declare
v_x t1.num%type;
begin
execute 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为rowtype
exit when c3%notfound;
④关闭游标
CLOSE c3;
⑤游标属性
%FOUND--布尔型属性,当最近一次读记录时成功返回,则值为TRUE;
%NOTFOUND--布尔型属性,与%FOUND相反;
%ISOPEN--布尔型属性,当游标已打开时返回TRUE;
%ROWCOUNT--数字型属性,返回已从游标中读取的记录数。

2、使用for自动打开、提取、关闭游标
FOR c1_rec IN c1 LOOP
FOR c1_rec IN(SELECT dname, loc FROM dept) LOOP
3、注:单一的SQL语句都是一个隐式的游标,属性为
SQL%FOUND--布尔型属性,当最近一次读记录时成功返回,则值为TRUE;
SQL%NOTFOUND--布尔型属性,与%FOUND相反;
SQL%ISOPEN--布尔型属性,当游标已打开时返回TRUE;
SQL%ROWCOUNT--数字型属性,返回已从游标中读取的记录数。

例如:DELETEFROM emp WHERE deptno=v_deptno;
IF SQL%NOTFOUND THEN ...
8、For Update锁定数据:
CURSOR emp_cursor is select empno,sal
from emp where deptno=v_deptno for update of sal nowait;
注意:其中的of sal,for update可以精确到某一个或几个字段
在使用了For Update之后可以在delete和update语句中使用current of cursor_name子句
for emp_record in emp_cursor loop
if emp_record.sal < 1500then
update emp set sal=1500where current of emp_cursor;
end if;
end loop;
但需注意:只能针对for update的表进行修改。

9、Package中的子程序可以重载
即函数名相同,参数个数不同
10、PL/SQL的执行顺序
在同一Package中,若要使用自身定义的Function或Procedure,则必须是之前定义过的。

同理,即便使用参数,也必须在前面定义过。

也就是说:一般最终的执行程序,会放在Package的最后,除非将所有部分都申明成Public。

相关文档
最新文档