PLSQL 基础教程 V1.0
- 格式:pdf
- 大小:574.71 KB
- 文档页数:15
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教学1、一个简单的程序set serveroutput on;&符号的作用:提示用户输入begindbms_output.put_line('HelloWorld!'); end;/ --执行语句2、一个简单的程序块declarev_name varchar2(20);beginv_name:='i am ynp';dbms_output.put_line(v_name);end;3、一个完整的简单程序declarev_num number := 0;beginv_num :=2/v_num;dbms_output.put_line(v_num); exceptionwhen others thendbms_output.put_line('error');end;----变量声明的规则1.变量名不能够使用保留字,如from、select等2.第一个字符必须是字母3.变量名最多包含30个字符4.不要与数据库的表或者列同名5.每一行只能声明一个变量-------------------------------------4、变量声明尽量以v_ 开头5、常用变量类型binary_integer :整数,主要用来计数而不是用来表示字段类型number :数字类型char :定长字符串类型varchar2 :变长字符串类型最大4Kdate:日期long:长字符串,最长2Gboolean:布尔类型,可以取值为false,True,null。
null参与运算值不确定,所以最好声明变量时就给它赋值。
6、变量声明declarev_temp number(1);v_count binary_integer :=0;v_sal number(7,2):=4000.00;v_date date := sysdate;v_pi constant number(3,2):=3.14; --constant相当java里的final(常量)v_valid booolean := false; --不能打印出布尔值.v_name varchar2(20) not null :='ynp';begindbms_output.put_line('v_temp is'||v_temp); --为连接符end;7、变量声明,使用%type属性声明变量的数据对应表的某个字段的数据,当表结构改变时(如把number(7,2),改为number(8,3)时,必须修改相应程序),用%type属性可以解决该问题。
PL/SQL程序设计包游标。
第一章PL/SQL 程序设计简介 (3)§1.2 SQL与PL/SQL (3)§1.2.1 什么是PL/SQL? (3)§1.2.1 PL/SQL的好处 (3)§1.2.2 PL/SQL 可用的SQL语句 (4)§1.3 运行PL/SQL程序 (4)第二章PL/SQL块结构和组成元素 (5)§2.1 PL/SQL块 (5)§2.2 PL/SQL结构 (5)§2.3 标识符 (5)§2.4 PL/SQL 变量类型 (6)§2.4.1 变量类型 (6)§2.4.2 复合类型 (7)§2.4.3 使用%ROWTYPE (9)§2.4.4 PL/SQL 表(嵌套表) (9)§2.5 运算符和表达式(数据定义) (10)§2.5.1 关系运算符 (10)§2.5.2 一般运算符 (10)§2.5.3 逻辑运算符 (11)§2.6 变量赋值 (11)§2.6.1 字符及数字运算特点 (11)§2.6.2 BOOLEAN 赋值 (11)§2.6.3 数据库赋值 (11)§2.6.4 可转换的类型赋值 (12)§2.7 变量作用范围及可见性 (12)§2.8 注释 (13)§2.9 简单例子 (13)§2.9.1 简单数据插入例子 (13)§2.9.2 简单数据删除例子 (13)第三章PL/SQL流程控制语句 (14)§3.1 条件语句 (14)§3.2 CASE 表达式 (15)§3.3 循环 (15)§3.3 标号和GOTO (17)§3.4 NULL 语句 (17)第四章游标的使用 (19)§4.1 游标概念 (19)§4.1.1 处理显式游标 (19)§4.1.2 处理隐式游标 (23)§4.1.3 关于NO_DATA_FOUND 和%NOTFOUND的区别 (24)§4.1.4 游标修改和删除操作 (24)第五章异常错误处理 (26)§5.1 异常处理概念 (26)§5.1.1 预定义的异常处理 (26)§5.1.2 非预定义的异常处理 (27)§5.1.3 用户自定义的异常处理 (28)§5.2 在PL/SQL 中使用SQLCODE, SQLERRM (29)第六章存储函数和过程 (31)§6.1 引言 (31)§6.2 创建函数 (31)§6.3 存储过程 (35)§6.3.1 创建过程 (35)§6.3.2 调用存储过程 (36)§6.3.3 AUTHID (38)§6.3.4 开发存储过程步骤 (38)§6.3.5 删除过程和函数 (39)第七章包的创建和应用 (40)§7.1 引言 (40)§7.2 包的定义 (40)§7.3 包的开发步骤 (41)§7.4 包定义的说明 (41)§7.5 子程序重载 (49)§7.6 删除包 (51)§7.7 包的管理 (51)第八章触发器 (52)§8.1 触发器类型 (52)§8.1.1 DML触发器 (52)§8.1.2 替代触发器 (52)§8.1.3 系统触发器 (52)§8.2 创建触发器 (53)§8.2.1 触发器触发次序 (54)§8.2.2 创建DML触发器 (54)§8.2.3 创建替代(INSTEAD OF)触发器 (54)§8.2.3 创建系统事件触发器 (56)§8.2.4 系统触发器事件属性 (57)§8.2.5 使用触发器谓词 (57)§8.2.6 重新编译触发器 (57)§8.3 删除和使能触发器 (58)第一章PL/SQL 程序设计简介PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE 数据库进行访问。
第4章PL/SQL语言基础本章学习内容1. PL/SQL语言简介2. 程序结构3. 流程控制4. 异常处理5. 开发动态SQL本章学习目标1. 掌握PL/SQL程序结构2. 掌握PL/SQL流程控制3. 掌握PL/SQL异常处理4. 掌握PL/SQL中开发动态SQL本章简介在第3章中,我们已经学习了同义词、序列、视图、索引等知识。
并通过同义词以一种非常简便的方式去访问其它方案中的对象;通过视图将一些复杂的SQL语句封装起来方便使用;通过序列作为表的自动编号并做为主键实现了数据库的实体完整性;通过使用各种索引在数据量非常宠大的表中提高查询效率。
但是要实现复杂的商用业务逻辑仅凭这些对象是远远不够的,我们必须使用程序流程控制和异常处理机制等。
本章将继续学习程序结构、流程控制、异常处理、开发动态SQL等知识。
流程控制是PL/SQL 对SQL最重要的扩展。
流程控制结构包括条件控制、循环控制和顺序控制,流程控制为我们提供了实现复杂业务逻辑的一种途径。
为处理程序中的异常,PL/SQL提供了一种异常错误处理机制,可以帮助实现对错误的捕获和处理,当异常发生时,PL/SQL会自动地捕获异常并自动地将程序控制流程转移到异常处理部分的程序。
在PL/SQL程序设计中,可以直接使用DML和事务控制的语句,但DDL语句及系统控制语句却不能在PL/SQL中直接使用。
如果需要在PL/SQL中使用DDL语句及系统控制语句,可以通过使用动态SQL来实现,如需要动态建表或某个不确定的操作需要动态执行。
4.1PL/SQL语言简介4.1.1 PL/SQL概述PL/SQL是Oracle在标准SQL语言上的过程性扩展,它不仅允许嵌入SQL语句,而且允许定义变量和常量,允许过程语言结构(条件分支语句和循环语句),允许使用异常来处理Oracle错误等。
在任何运行Oracle的平台上,应用开发人员都可以使用PL/SQL。
通过使用PL/SQL,可以在一个PL/SQL块中包含多条SQL语句和PL/SQL语句。
plsql教程PL/SQL是一种与Oracle数据库一起使用的过程化编程语言。
它是操纵、定义和控制Oracle数据库对象的语言,并提供了一种编写存储过程、触发器、函数、包等数据库程序模块的方式。
PL/SQL的基本语法与SQL相似,可以执行SQL语句和存储过程的调用。
以下是一些常用的PL/SQL代码示例:1. 声明变量和常量:```DECLAREnum1 NUMBER := 10;text1 VARCHAR2(20) := 'Hello';constant1 CONSTANT NUMBER := 5;BEGIN-- 执行代码END;```2. 条件语句:```IF num1 > 0 THENNULL;ELSIF num1 = 0 THENNULL;ELSENULL;END IF;```3. 循环语句:```FOR i IN 1..5 LOOPNULL;END LOOP;WHILE num1 > 0 LOOP NULL;num1 := num1 - 1; END LOOP;LOOPNULL;EXIT WHEN num1 = 0; num1 := num1 - 1; END LOOP;```4. 异常处理:```BEGIN-- 执行代码EXCEPTIONWHEN OTHERS THEN -- 处理异常END;```5. 创建存储过程:```CREATE OR REPLACE PROCEDURE procedure_name (param1 IN NUMBER, param2 OUT VARCHAR2) IS-- 变量声明BEGIN-- 执行代码param2 := 'Hello';END;```这些只是PL/SQL语言的一部分功能和用法。
通过学习和实践,您可以掌握更多PL/SQL的知识和技巧,提高数据库编程的效率和质量。
plsql 使用手册摘要:1.简介- Oracle PL/SQL简介- 为什么使用PL/SQL2.PL/SQL基础- 创建PL/SQL块- 声明变量- 数据类型- 控制结构- IF-ELSE 条件语句- CASE 选择语句- LOOP 循环语句- GOTO 跳转语句- 异常处理3.过程和函数- 创建过程和函数- 参数传递- 返回值- 过程和函数的调用4.游标- 游标的概念和类型- 打开游标- 获取数据- 关闭游标- 游标的更新和删除操作5.存储过程- 存储过程的概念和优点- 创建存储过程- 调用存储过程- 参数传递和返回值6.触发器- 触发器的概念和类型- 创建触发器- 触发器的执行时机- 触发器的应用场景7.包- 包的概念和优点- 创建包- 调用包中的过程和函数- 包的维护8.数据库交互- 连接数据库- 查询数据- 更新数据- 删除数据- 事务处理9.高级主题- 安全性和权限控制- 性能调优- 全球化支持正文:PL/SQL(Procedural Language/Structured Query Language)是一种过程式编程语言,用于Oracle 数据库管理系统。
它允许开发人员编写可重用的组件,如存储过程、触发器和包,从而简化了数据库应用程序的开发和维护。
在本使用手册中,我们将介绍PL/SQL 的基本概念和特性,以及如何使用它来创建高效、可靠的数据库应用程序。
1.简介Oracle PL/SQL是一种强大的编程语言,它允许开发人员在SQL语句中嵌入PL/SQL块,以实现更高级别的功能。
使用PL/SQL可以提高代码的重用性、模块化和安全性,降低应用程序的开发和维护成本。
1.1 为什么使用PL/SQLPL/SQL具有以下优点:- 代码可重用:PL/SQL 允许开发人员创建可重用的存储过程、触发器和包,从而减少代码量,提高开发效率。
- 模块化:PL/SQL 块可以嵌套,使代码结构更清晰,易于理解和维护。
PLSQL基础语法有时候我们需要对数据库中的数据进⾏⼀些稍微复杂的操作,⽽且这些操作都是⼀次性的,⽤完之后就不再⽤了。
⽤存储过程的话就太⿇烦,⽽且浪费,⽤完了还要去删除。
⽽单个SQL⽆法满⾜需求。
这时候⽤⼀下SQL的语句块就可以了。
如果你⽤的是Oracle数据库,那么你就可以⽤PL/SQL(Procedure Language/SQL),即过程化查询语⾔。
这是第三代语⾔。
⽽我们⽤的SQL是结构化查询语⾔,属于第四代语⾔。
PL/SQL能够实现更加复杂的逻辑操作,像我们使⽤Java,C等⾼级语⾔⼀样。
但如果是在MYSQL/SQLSERVER数据库中,那PL/SQL 就⽆法使⽤(PL/SQL是属于Oracle的过程查询语⾔)。
如果你要在MYSQL/SQLSERVER实现复杂的逻辑查询,那你只能通过编写存储过程实现。
下⾯对PL/SQL常⽤的⼀些基础知识进⾏讲解。
在讲解之前,先创建⼀个⽤于测试的表:--创建测试表create table t_plsql_test(id varchar(10),name varchar(100),mDate date);--插⼊测试数据insert into t_plsql_test values(1, 'one', to_date('1992/03/08', 'YYYY/MM/DD'));insert into t_plsql_test values(2, 'one', to_date('1993/03/08', 'YYYY/MM/DD'));insert into t_plsql_test values(3, 'one', to_date('1994/03/08', 'YYYY/MM/DD'));commit;--查看select * from t_plsql_test;⼀、PL/SQL的结构[declare] --变量声明(可以省略) --如:my_var varchar(200);begin --SQL语句[exception] --异常声明(可以省略) end;例如:declarenowDate date:= sysdate;BEGINupdate t_plsql_testset mdate = nowDatewhere id = 3;commit;END;--查看select * from t_plsql_test;⼆、PL/SQL的基本规则1、标识符不区分⼤⼩写,所有的名称在存储时⾃动改成⼤写。
目录一、常用的数据库对象 (2)二、表和视图的使用 (2)1.表的建立和删除 (2)a.建表语句 (3)三、数据的增删改查 (4)1.增加数据 (4)a.通过Insert into增加数据 (4)2.查询数据 (5)3.修改数据 (8)4.删除数据 (11)四、常用函数举例 (12)1.日期和字符串转换函数 (12)2.DECODE 转码 (12)3.NVL 空值替换 (13)4.SUBSTR 字符串截取函数 (13)5.REPLACE 字符串替换函数 (13)6.分组函数返回基于多个行的单一结果. (13)五、常用查询技巧 (14)1.Union 和union all的使用 (14)文档说明:本文档用于描述基于PLSQL的一些SQL基础知识及使用技巧,便于相关人员了解基础SQL的语法知识及简单的使用技巧,以便于在实际的工作中能更好的处理遇到的一些问题。
通过本文档的学习希望可以到达能使用PLSQL进行基础的查询、新增、修改和删除等等的基本操作。
文档的最后还会介绍一些多表连接及自查询、常用函数等等的相关知识,便于进一步提高相关的SQL使用技巧,方便更好的解决实际中遇到的问题。
一、常用的数据库对象oracle数据中的数据对象有很多,常用的包括表、视图、序列同义词、函数、包等等,本文档并中不一一举例介绍,主要是介绍一下表和视图的创建语句及使用,同时介绍一些常用的系统内置函数及使用技巧。
二、表和视图的使用表和视图都是oracle数据库中的对象,其中,表主要是用于存储数据的数据存储单元,可以对表进行新增、修改、删除、查询等等操作;而视图是基于表建立的数据库对象,主要是为了查询获取相关的数据,不能对视图进行新增、修改、删除、查询等等操作。
(此处说的增删改查操作是针对表存储的数据而言的,并不是针对表和视图结构本身)1.表的建立和删除a.建表语句Oracle de 建表语句使用create table 关键字,具体格式如下:Create table + 所属用户.表名+(字段名字段类型)其中,多个字段使用“,”分隔开,如下上述脚本执行之后的效果就是在apps用户下建立了一个名称为cux_sql_learn的数据表,包含两个字段,Id 数据字类型的和CLASS_NAME 字符串类型。
b.删除表删除表和不同的删除数据不同。
删除数据是删除表中存储的满足条件的数据,只是删除表中的全部或者部分数据,但是表的结构还是存储在数据库中的;删除表是直接删除数据库中的表对象,删除之后表及其中的数据都不会存在于数据库了,因此一般实际操作中需要谨慎,切记不要轻易删除表。
删除表的语法为:Drop + Table + 表名以上语句执行之后将会删除数据库中的表,在使用该表执行操作,例如查询,就是报错应为该表已经不存在与数据库中了,所以执行drop之后对该表的任何操作都会报错。
三、数据的增删改查数据的增、删、改操作主要是针对表来进行的,具体介绍如下:(此处的示例均已CUX_SQL_LEARN表为例)1.增加数据a.通过Insert into增加数据格式为insert into <table_name>(<column_list>)Values(<value_list>);column_list 为表中的列,values中的column_list 为对应的列的插入数值,需要与列的定义的数据类型一致。
一下脚本是向CUX_SQL_LEARN表中插入一条数据上述SQL脚本执行之后需要执行红框中的commit操作,使得修改得以生效。
然后通过查询即可查询新插入的数据:2.查询数据通过SELECT 关键字进行查询操作,具体格式为select <item_list>from <table_list>where <where_clause>order by <order_by_clause>select 后跟需要选择的字段,多个字段使用”,”分隔开来from 后边跟表名,多个表名使用”,”分隔where 后边的是过滤条件(可以使用and或者or 连接多个条件,and表示都的意思,即所有条件都满足;or表示或者的意思,多个条件满足其一即可)order by 后边跟需要按照那些字段来排序,多个字段使用”,”分隔,升序使用asc 关键字表示,降序使用desc表示具体使用示例如下:未加过滤条件的查询添加过滤条件的查询(and 和 or):说明:上述查询中在表明后边的N 表示当前查询中的表CUX_SQL_LEARN 的别名,在SELECT后边可以使用表的别名来代替表名获取字段信息,相对于书写完整的表名,比较方便使用。
3.修改数据修改数据有两种方式,update和select ... for update,其区别及优缺点如下:Update 比较常用,通过脚本修改数据,适合批量修改Select … for update 适用于手动修改数据,即先查询出满足条件的数据,然后手动逐条修改,修改的时候可以看到查询出来的数据及修改后的数据,但是效率较低;两者的共同点是修改之后都需要提交事务操作,否则修改不生效。
具体示例如下:原始测试数据:将Id为3的数据的CLASS_NAME修改为“修改测试”UPDATE 方式修改:update <table_name>set <column_assignment>where <where_clause>;update 后边跟的是需要修改的表的表名,set 后边是需要修改的字段,多个字段使用”,”分隔开,where 后边是限定条件,即只修改满足条件的数据SELECT .. FOR UPDATE 方式修改select <item_list>from <table_list>where <where_clause>for update;select 后边是需要展示的和修改的字段form 后边是需要修改的数据表where 后边是需要修改的限定条件,只修改满足条件的数据即可for update 添加了for update的select 才允许修改数据查询出来数据之后,点击红框中的锁子标识的按钮解锁数据后才可以修改修改后需要再做三个步骤:1.) 点击绿色对钩,保存修改2.) 点击锁标识按钮,锁定记录3.) 提交事务,使得修改生效修改后的数据:4.删除数据删除表中的数据通过使用 Delete 关键字来执行,格式为:delete <table_name>where <where_clause>;delete 后边是需要删除数据的表where 后边是需要限定的条件delete 操作也是需要提交事务的以上脚本的目的就是删除数据表CUX_SQL_LEARN中的Id为3 的记录数据四、常用函数举例1.日期和字符串转换函数TO_DATE---转换字符串为日期型格式∶TO_DATE(STRING[,’FORMAT’])TO_CHAR---转换日期型或数值型为字符串。
最重要的函数之一.其FORMAT格式多种多样格式∶TO_CHAR(DATE [,’FORMAT’])比较常用的是日期格式:YYYY-MM-DD HH24:MI:SS 及年月日时分秒其中:Y代表年份,M代表月份,D代表天,HH代表小时,HH24代表24小时制的小时数,MI代表分钟,SS代表秒,可以在实际使用中根据需要组合使用2.DECODE 转码DECODE---IF语句的另一形式。
将输入数值与参数列表比较,返回对应值例∶ DECODE(VALUE,1,100,2,300,500)当VALUE=1时返回100当VALUE=2时返回300否则返回5003.NVL 空值替换格式: NVL(value,替换值)4.SUBSTR 字符串截取函数START为正数时从左开始、为负数时从右开始格式∶ SUBSTR(STRING , START [ , COUNT])例∶ SUBSTR(‘WORDSTAR’ , 2 , 3)=’ ORD’5.REPLACE 字符串替换函数格式∶REPLACE(string , substring , replace_string) 例∶ REPLACE(‘this is a test’ , ‘this’ , ‘that an’)=’that an is a test’分组函数6.分组函数返回基于多个行的单一结果.常用函数:AVG---求平均值COUNT---返回查询的行数MAX---返回查询列的最大值MIN---返回查询列的最小值SUM---返回查询列的总和MAX, MIN常与GROUP BY配套使用此处以MIN和MAX为例说明,其余使用与此类似五、常用查询技巧1.Union 和union all的使用Union 和union all主要是用于连接两个获取相同列的查询的,其中union 是去掉重复项的,union all 如果两个SQL 中包含重复记录则会全部展示出来此处使用相同的一段SQL来看看union和union all 的区别Union 使用示例:可以看到其中union 下边拼接了一个Id为2的查询语句,但是结果中只有一个Id为2的记录,因为union会去掉结果中的重复记录Union all 使用示例:select2id, '测试2' class_name from dual该结果中的两个Id为2的记录都展示出来了,可见得union all并没有进行去重操作。