前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【PL/SQL编程基础】

【PL/SQL编程基础】

作者头像
代码改变世界-coding
发布2018-07-03 13:39:07
8060
发布2018-07-03 13:39:07
举报
文章被收录于专栏:java相关java相关

【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调用子程序

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档