【PL/SQL编程基础】
【PL/SQL编程基础】
语法:
declare
声明部分,例如定义变量、常量、游标
begin
程序编写,SQL语句
exception
处理异常
end;
/ 正斜杠表示执行程序快
范例
-- Created on 2016/8/22 by VITAS
declare 定义变量
v_num number;
v_eno number;
v_ename varchar2(10);
begin
v_num:=234;
v_eno:=&empno; 接收输入变量
select ename into v_ename from emp where empno=v_eno;
DBMS_OUTPUT.put_line(v_ename);
end;
/
变量的声明和使用
PLSQL是一种强类型的编程语言,变量名前加v表示变量
语法:
所有的变量都要求在declare部分之中进行,可以在定义的时候赋默认值,变量声明语法如下:
变量名[constant] 类型 [not null][:=value]
declare
v_resultA number;
v_resultB number :=100;
v_resultC constant number:=14;
begin
v_resultA:=10;
dbms_output.put_line('result 的值是:'||(v_resultB+v_resultA+v_resultC));
end;
/
使用%type定义变量
使用%rowtype声明变量,可以定义表中一行记录的类型
运算符:
掌握变量的声明和使用
掌握%type和%rowtype的使用
PL/SQL分支语句
if/else
循环:
loop:
语法:
loop
exit when 循环结束条件
end loop
while() loop
end loop;
for:
for 循环索引 in 循环区域下线..循环区域上线 loop
end loop;
goto语句:
goto endpoint
<<endpoint>>
异常处理:
1、编译时异常,无法处理
2、运行时异常:用户可以处理的只有运行时异常
异常处理要使用EXCEPTION子句处理,通过when子句对异常处理
when 异常类型|用户自定义异常|异常代码|other then
异常处理
产生异常后继续执行其他代码
记录类型:
定义记录类型语法:
type 类型名 is record(
成员名 数据类型 [[not null][:=默认值] 表达式],
......
成员名 数据类型 [[not null][:=默认值] 表达式]
)
嵌套记录类型
雇员中包含部门信息
插入复合数据类型
insert into dept values v_dept
更新复合数据类型
update dept set ROW=v_dept where deptno=v_dept_deptno;
索引表的概念(数组)
索引表类似于程序语言中的数组,可以保存多个数据
区别:不需要初始化
索引:数字或者字符串,下标可以设置为负数
语法:
type 类型名称 is table of 数据类型【not null】
index by [pls_integer|binary_interger|varchar2]
访问没有定义的索引,会出现数据找不到的异常,但是索引的下标不是顺序的,所以索引值可能不存在,一次提供exists(index)判断是否存在
范例:使用字符串作为字符索引
范例:使用rowtype数组
范例:使用记录类型数组
嵌套表:(跳过)start
1、定义简单类型的嵌套表
CREATE [OR REPLACE] TYPE 类型名称 AS|IS TABLE OF 数据类型 [not null];/
create or replace type project as table of varchar2(20);
集合运算符:
集合函数:count、first last
集合异常处理:
跳过 end
使用forall批量处理:
使用for in:(更新n次)
for xx in 集合 first..last loop
end loop
2、使用forall:(批处理更新数据)
语法:
forall x in 集合 first..last
update.....
批量接收数据:
bulk collect into
子程序:
目标
1、掌握子程序的分类
包含存储过程和函数
定义过程:
专门定义一组sql语句集
语法:
过程=声明+plsql快
CREATE [OR REPLACE] PROCEDURE 过程名 (参数名[模式in/out/in out] nocopy 数据类型,....)
as|is
[pragma autonomous_transaction]
声明部分:
begin
exception when others then
rollback
end 过程名
过程没有返回值
create or replace procedure ChangePassword(userName in out varchar2,
password in out varchar2) is
pragma autonomous_transaction;
v_result boolean;
begin
v_result := login(userName, password);
end ChangePassword;
范例:定义一个过程
过程定义完之后要通过exec 过程名 执行过程
范例:
定义过程根据雇员编号找到姓名和工资
函数:
用户定义的sql语句或者plssql直接调用,函数和过程的最大区别在于函数可以返回值,而过程智能通过in和out来返回数据,
语法如下:类型为numnber或者varchar时不需要定义长度否则编译不能通过
CREATE [OR REPLACE] FUNCTION 过程名 (参数名[模式] nocopy 数据类型,....)
return 返回值类型
as|is
[pragma autonomous_transaction]
声明部分
begin
return 返回值;
exception when others then
rollback
end 函数名
create or replace function LOGIN(userName in out varchar2,
password in varchar2) return boolean is
v_isLogin boolean;
--定义rowtype
userrow T_USER%ROWTYPE;
--定义元素为rowtype类型的集合
type UserInfo is table of T_USER%ROWTYPE index by binary_integer;
--定义类型后需要对定义类型变量
users UserInfo;
--定义记录类型
type userRecord is record(
id number(10),
userName varchar2(32),
password varchar2(32),
roleId number(10));
userR userRecord;
--定义自定义事务,此事务的rollback和commit不会影响到主事务
pragma autonomous_transaction;
begin
--使用bulk collect into批量查询赋值
select * into userR from T_USER where userName = 'YWP';
userR.userName := 'zp';
insert into T_USER VALUES userR;
commit;
select *
BULK COLLECT
INTO users
from T_USER
where username = userName
and password = password;
if users.count != 0 then
dbms_output.put_line('welcome login my system!');
else
dbms_output.put_line('用户名或密码错误');
end if;
exception
when others then
dbms_output.put_line('313');
/* --使用for in遍历集合
for i in users.first .. users.last loop
--输出变量时先判断下标是否存在
if users.exists(i) then
dbms_output.put_line('welcome login my system!');
end if;
end loop;*/
userName := 'ywp';
return(v_isLogin);
end LOGIN;
2、掌握子程序的定义和区别
子程序的参数模式
形参定义有三种
in:(默认值),子程序中所做的修改不会影响原始参数(基本数据类型的传递)
out:不带任何数值的子程序中,子程序可以通过此变量将数值传到调用处(引用数据类型的传递)
inout,可以将值传到子程序中,兵将子程序对变量的修改返回到调用处
nocopy子选项:将参数变为引用传递,in和out为复制传递参数
自治事务:
在oracle中每个session都有独立的事务,
启动子事务
利用java调用子程序
【PL/SQL编程基础】的更多相关文章
- Oracle数据库编程:PL/SQL编程基础
2.PL/SQL编程基础: PL/SQL块: declare 定义部分 begin 执行部分 exception 异 ...
- PL/SQL编程基础(三):数据类型划分
数据类型划分 在Oracle之中所提供的数据类型,一共分为四类: 标量类型(SCALAR,或称基本数据类型) 用于保存单个值,例如:字符串.数字.日期.布尔: 标量类型只是作为单一类型的数据存在,有的 ...
- Oracle Pl/SQL编程基础
Pl/SQL简介 提高应用程序的运行性能, 提供模块化的程序设计, 自定义标示符, 具有过程语言控制结构, 良好的兼容性, 处理运行错误. Pl/SQL语言基础 sql是关系数据库的基本操作语言. s ...
- PL/SQL编程基础(五):异常处理(EXCEPTION)
异常处理 异常产生所带来的问题: 使用EXCEPTION程序块进行异常处理: 实现用户自定义异常. 使用异常可以保证在程序中出现运行时异常时程序可以正常的执行完毕: 用户可以使用自定义异常进行操作. ...
- PL/SQL编程基础(一):PL/SQL语法简介(匿名PL/SQL块)
PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...
- PL/SQL编程基础——PL/SQL简介
课程教师:李兴华 课程学习者:阳光罗诺 日期:2018-07-28 知识点: 1. 了解PL/SQL的主要特点 2. 掌握PL/SQL块的基本结构 PL/SQL PL/SQL是Oracle在关系数据库 ...
- Oracle PL/SQL 编程基础 实例
create table mytest(name varchar(20),password varchar(30)); create or replace procedure sp_pro2 is ...
- PL/SQL编程基础(四):程序控制(IF,CASE,FOR,LOOP,WHILE LOOP,EXIT,CONTINUE)
程序控制 程序结构有分支结构与循环结构: 分支结构语法:IF.CASE: 循环结构:FOR.WHILE LOOP:先执行再判断,至少执行一次: WHILE LOOP:先判断再执行,如果不满足条件,就不 ...
- PL/SQL编程基础(二):变量的声明、赋值、(赋值、连接、关系、逻辑)运算符
变量的声明.赋值.运算符 1.声明并使用变量 变量可以在声明时赋值,也可以先定义后赋值: 使用%TYPE与%ROWTYPE可以根据已有类型定义变量. PL/SQL是一种强类型的编程语言,所有的变量都必 ...
随机推荐
- 打造自己的JavaScript武器库
自己打造一把趁手的武器,高效率完成前端业务代码. 前言 作为战斗在业务一线的前端,要想少加班,就要想办法提高工作效率.这里提一个小点,我们在业务开发过程中,经常会重复用到日期格式化.url参数转对象. ...
- Java jar包查询下载方法
做过java开发的工程师,对java应用所需jar包一定不会陌生.特别是有需要搭建开发环境时,对各种jar包的需求量就会很大. 如何快速的找到自己想要的jar包,是蛮多java工程师所面临的一个难题. ...
- Windwos下安装和使用MongoDB
1)下载安装包下载路径:https://www.mongodb.com/download-center#community包名称:mongodb-win32-x86_64-3.4.10-signed. ...
- JS 操作内容 操作元素
操作内容:普通元素.innerHTML = "值": 会把标记执行渲染普通元素.innerText = "值": 将值原封不动的展示出来,即使里面有标记 var ...
- Servlet和JSP之有关Servlet和JSP的梳理(二)
JSP JSP页面本质上是一个Servlet,JSP页面在JSP容器中运行,一个Servlet容器通常也是JSP容器. 当一个JSP页面第一次被请求时,Servlet/JSP容器主要做一下两件事情: ...
- 使用JDK自带的jmap和jhat监控处于运行状态的Java进程
对于处于运行状态中的Java进程,JDK自带了很多工具,允许Java开发人员监控运行进程中的各种状态,比如该进程内部创建了多少个对象实例,消耗了多少内存,等等. 本文基于JDK1.8而写成. 我下面写 ...
- root.sh脚本支持checkpoints文件实现重复运行
安装集群GRID/GI一般包括三个过程:首先,运行OUI/RunInstaller输入集群配置信息,其次,拷贝/编译集群文件,最后,以root用户运行root.sh脚本配置集群/启动集群,其中运行ro ...
- Centos7 安装python3.5.3
使用root用户安装:切换到root用户 su 回车,然后输入密码,切换到root用户. 新建一个脚本,如installPython.sh #!/bin/bash yum -y install zli ...
- 想转行做web前端工程师,必学这5大技能!知道是那些吗?
web前端工程师是近几年才发展出来的新兴职业,也是目前火爆且高薪的职业. 大需求的市场环境下,出现了越来越多的人群转行做web前端工程师,如设计师.后台程序员.网虫.大学其他专业.策划.编辑等等. 要 ...
- kitti raw data development kit的使用
run_demoVelodyne.m使用:http://blog.csdn.net/qq_33801763/article/details/78959205 https://www.cnblogs ...