【PL/SQL编程基础】

时间:2022-04-19 06:40:24

【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编程基础】的更多相关文章

  1. Oracle数据库编程:PL&sol;SQL编程基础

    2.PL/SQL编程基础: PL/SQL块:        declare        定义部分        begin        执行部分        exception        异 ...

  2. PL&sol;SQL编程基础(三):数据类型划分

    数据类型划分 在Oracle之中所提供的数据类型,一共分为四类: 标量类型(SCALAR,或称基本数据类型) 用于保存单个值,例如:字符串.数字.日期.布尔: 标量类型只是作为单一类型的数据存在,有的 ...

  3. Oracle Pl&sol;SQL编程基础

    Pl/SQL简介 提高应用程序的运行性能, 提供模块化的程序设计, 自定义标示符, 具有过程语言控制结构, 良好的兼容性, 处理运行错误. Pl/SQL语言基础 sql是关系数据库的基本操作语言. s ...

  4. PL&sol;SQL编程基础(五):异常处理(EXCEPTION)

    异常处理 异常产生所带来的问题: 使用EXCEPTION程序块进行异常处理: 实现用户自定义异常. 使用异常可以保证在程序中出现运行时异常时程序可以正常的执行完毕: 用户可以使用自定义异常进行操作. ...

  5. PL&sol;SQL编程基础&lpar;一&rpar;:PL&sol;SQL语法简介(匿名PL&sol;SQL块)

    PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...

  6. PL&sol;SQL编程基础——PL&sol;SQL简介

    课程教师:李兴华 课程学习者:阳光罗诺 日期:2018-07-28 知识点: 1. 了解PL/SQL的主要特点 2. 掌握PL/SQL块的基本结构 PL/SQL PL/SQL是Oracle在关系数据库 ...

  7. Oracle PL&sol;SQL 编程基础 实例

    create table mytest(name varchar(20),password varchar(30)); create or replace procedure sp_pro2 is  ...

  8. PL&sol;SQL编程基础(四):程序控制(IF&comma;CASE&comma;FOR&comma;LOOP&comma;WHILE LOOP&comma;EXIT&comma;CONTINUE)

    程序控制 程序结构有分支结构与循环结构: 分支结构语法:IF.CASE: 循环结构:FOR.WHILE LOOP:先执行再判断,至少执行一次: WHILE LOOP:先判断再执行,如果不满足条件,就不 ...

  9. PL&sol;SQL编程基础(二):变量的声明、赋值、(赋值、连接、关系、逻辑)运算符

    变量的声明.赋值.运算符 1.声明并使用变量 变量可以在声明时赋值,也可以先定义后赋值: 使用%TYPE与%ROWTYPE可以根据已有类型定义变量. PL/SQL是一种强类型的编程语言,所有的变量都必 ...

随机推荐

  1. 【HTML5&amp&semi;CSS3进阶03】Jser与Csser如何一起愉快的翻新老组件

    上次,我们形成了两种header的布局,一种flexbox,一种float,最后与身边做重构的同事交流下来,选择了float的布局. 事实上布局的选型不需要我关注,我的参与或者一些意见多数是自我提升, ...

  2. java类的初始化和对象的创建顺序

    学习java编程思想--类的初始化p146 类的加载顺序* 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类* 2类初始化先初始化static成员变量和stati ...

  3. eclipse新建maven项目(1)

    首先看一下eclipse版本,我用的是最新版Mars2. 下载地址自行搜索关键字:“eclipse官网”即可,注意下版本,32bit or 64bit. maven插件以及svn等相关插件安装设置问题 ...

  4. docker基础命令详解

    Commands: attach    Attach to a running container build     Build an image from a Dockerfile commit  ...

  5. 为何要使用Linux

    摈弃 Windows 低效率的工作方式,发掘 Linux 身上的 UNIX 气质 我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的工作. GNU/Linux 不是每个 ...

  6. 在LAMP环境下搭建JSP动态网页

    开发环境Linux的版本号Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x ...

  7. scala学习笔记——操作符

    中置操作符(二元操作符),操作符位于两个参数之间.操作符包括字母,比如to,也可以包括操作符字符,比如1->10,等同于方法调用1.->(10) a 标识符 b 其中的标识符是一个带有两个 ...

  8. Time&period;timeScale、游戏暂停

    原文链接 项目里面一直在用Time.timeScale来做游戏的 1倍 2倍整体加速,今天我仔细看了一下Time.timeScale才发现之前我理解错了一些东西. Time.timeScale可以控制 ...

  9. Vcomputer简介

    1.Vcompter存储程序式计算机虚拟机软件简介   Vcompter存储程序式计算机虚拟机软件的文件名为comp_alpha(一般要先安装java运行环境,然后双击该软件即可运行),该软件是桂林电 ...

  10. leetcode 104&period; Maximum Depth of Binary Tree 111&period; Minimum Depth of Binary Tree

    104: class Solution { public: int maxDepth(TreeNode* root) { if(root == NULL) ; int left = maxDepth( ...