Oracle--PL/SQL、系统内置函数
2018-04-02 20:51
453 查看
一、PL/SQL
PL/SQL(Procedural Language/SQL)是一种过程化语言,PL/SQL是Oracle的专用语言,它是对标准SQL语言的扩展,它允许在其内部嵌套普通的SQL语句,也可以定义变量和控制程序的执行流程,这样就将SQL语句的数据操纵和查询能力与PL/SQL的过程处理能力结合在一起了。
1、PL/SQL程序块
标准PL/SQL语法如下:[DECLARE] --声明部分,可选
BEGIN --执行部分,必须
[EXCEPTION] --异常处理部分,可选
END
2、定义变量和常量
(1)定义变量
变量是指其值在程序运行过程中可以改变的数据存储结构,定义变量必须的元素就是变量名和数据类型,另外还有可选择的初始值,其标准语法格式如下:
<变量名> <数据类型> [(长度):=<初始值>];
(2)定义常量
常量是指其值在程序运行过程中不可改变的数据存储结构,定义常量必须的元素包括常量名、数据类型、常量值和constant关键字,其标准语法格式如下:
<常量名> constant <数据类型>:=<常量值>;
3、基本数据类型
数值类型主要包括NUMBER、PLS_INTEGER和BINARY_INTEGER三种基本类型。其中,NUMBER类型的变量可以存储整数或浮点数;而BINARY_INTEGER或PLS_INTEGER类型的变量只存储整数
number(m) //m指总的位数
number(m,n) //m指总的位数,n指小数位数4、字符类型
字符类型主要包括VARCHAR2、CHAR、LONG、NCHAR和NVARCHAR2等。这些类型的变量用来存储字符串或字符数据。
5、日期类型
日期类型只有一个种——即DATE类型,用来存储日期和时间信息,DATE类型的存储空间是7个字节,分别使用一个字节存储世纪、年、月、天、小时、分钟和秒。
6、布尔类型
布尔类型也只有一种——即BOOLEAN,主要用于程序的流程控制和业务逻辑判断,其变量值可以是TRUE、FALSE或NULL中的一种。
7、特殊类型
(1)%type
使用%type关键字可以声明一个与指定列名称相同的数据类型,它通常紧跟在指定列名的后面
set serveroutput on
declare
var_ename emp.ename%type;
var_job emp.job%type;
begin
select ename,job into var_ename,var_job from emp where empno=7369;
dbms_output.put_line('姓名:'||var_ename||'职位:'||var_job);
end;
/(2)record
record类型也称作“记录类型”,使用该类型的变量可以存储由多个列值组成的一行数据。在声明记录类型变量之前,首先需要定义记录类型,然后才可以声明记录类型的变量。记录类型是一种结构化的数据类型,它使用type语句进行定义,在记录类型的定义结构中包含成员变量及其数据类型,其语法格式如下:
type record_type is record
(
var_member1 data_type [not null] [:=default_value],
…
var_membern data_type [not null] [:=default_value])
%rowtype类型的变量结合了“%type类型”和record类型变量的优点,它可以根据数据表中行的结构定义一种特殊的数据类型,用来存储从数据表中检索到的一行数据。它的语法形式很简单,如下所示。
rowVar_name table_name%rowtype;
declare
rowVar_emp emp%rowtype;
begin
select * into rowVar_emp from emp where empno=7369;
dbms_output.put_line('姓名:'||rowVar_emp.ename);
end;
/8、选择语句
(1)if...then语句
if…then语句是选择语句中最简单的一种形式,它只做一种情况或条件判断,其语法格式如下: if < condition_expression> then
plsql_sentence
end if;
语法格式如下:
if < condition_expression1 > then
plsql_sentence_1;
elsif < condition_expression2 > then
plsql_sentence_2;
…
else
plsql_sentence_n;
end if;
在编写程序的过程中,if…then…else语句是最常用到的一种选择语句,它可以实现判断两种情况,只要if后面的条件表达式为false,程序就会执行else语句下面的PL/SQL语句。其语法格式如下:
if < condition_expression> then
plsql_sentence1;
else
plsql_sentence2;
end if;
(1)loop语句(先执行一次循环,再判断)
loop
循环执行的语句块;
exit when 循环结束条件;
循环结束条件修改;
end loop;
(2)while...loop语句while(循环条件) loop
循环执行的语句块;
循环结束条件修改;
end loop;
(3)for语句
for语句有一个循环计数器,通过这个循环计数器来控制循环执行的次数。该计数器可以从小到大进行记录,也可以相反,从大到小进行记录。另外,该计数器值的合法性由上限值和下限值控制,若计数器值在上限值和下限值的范围内,则程序执行循环;否则,终止循环,其语法格式如下。
for variable_ counter_name in [reverse] lower_limit..upper_limit loop
plsql_sentence;
end loop;10、选择和跳转语句
在case关键字的后面有一个选择器,它通常是一个变量,程序就从这个选择器开始执行,接下来是when子句,并且在when关键字的后面是一个表达式,程序将根据选择器的值去匹配每个when子句中的表达式的值,从而实现执行不同的PL/SQL语句,其语法格式如下:
case < selector>
when <expression_1> then plsql_sentence_1;
when <expression_2> then plsql_sentence_2;
…
when <expression_n> then plsql_sentence_n;
[else plsql_sentence;]
end case;
二、系统内置函数
1、字符类函数
ASCII(c)函数 将字符转换为ASCII码
CHR(i)函数 将ASCII码转换为字符
CONCAT(s1,s2)函数连接字符串
INITCAP(s) 函数 将每个单词的首字母大写
2、数字类函数
![](https://img-blog.csdn.net/20180402204743647?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ptMTIyNV8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
3、日期和时间类函数
![](https://img-blog.csdn.net/2018040220484244?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ptMTIyNV8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
4、转换类函数
![](https://img-blog.csdn.net/20180402204921239?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ptMTIyNV8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
5、聚集类函数
PL/SQL(Procedural Language/SQL)是一种过程化语言,PL/SQL是Oracle的专用语言,它是对标准SQL语言的扩展,它允许在其内部嵌套普通的SQL语句,也可以定义变量和控制程序的执行流程,这样就将SQL语句的数据操纵和查询能力与PL/SQL的过程处理能力结合在一起了。
1、PL/SQL程序块
标准PL/SQL语法如下:[DECLARE] --声明部分,可选
BEGIN --执行部分,必须
[EXCEPTION] --异常处理部分,可选
END
2、定义变量和常量
(1)定义变量
变量是指其值在程序运行过程中可以改变的数据存储结构,定义变量必须的元素就是变量名和数据类型,另外还有可选择的初始值,其标准语法格式如下:
<变量名> <数据类型> [(长度):=<初始值>];
(2)定义常量
常量是指其值在程序运行过程中不可改变的数据存储结构,定义常量必须的元素包括常量名、数据类型、常量值和constant关键字,其标准语法格式如下:
<常量名> constant <数据类型>:=<常量值>;
3、基本数据类型
数值类型主要包括NUMBER、PLS_INTEGER和BINARY_INTEGER三种基本类型。其中,NUMBER类型的变量可以存储整数或浮点数;而BINARY_INTEGER或PLS_INTEGER类型的变量只存储整数
number(m) //m指总的位数
number(m,n) //m指总的位数,n指小数位数4、字符类型
字符类型主要包括VARCHAR2、CHAR、LONG、NCHAR和NVARCHAR2等。这些类型的变量用来存储字符串或字符数据。
5、日期类型
日期类型只有一个种——即DATE类型,用来存储日期和时间信息,DATE类型的存储空间是7个字节,分别使用一个字节存储世纪、年、月、天、小时、分钟和秒。
6、布尔类型
布尔类型也只有一种——即BOOLEAN,主要用于程序的流程控制和业务逻辑判断,其变量值可以是TRUE、FALSE或NULL中的一种。
7、特殊类型
(1)%type
使用%type关键字可以声明一个与指定列名称相同的数据类型,它通常紧跟在指定列名的后面
set serveroutput on
declare
var_ename emp.ename%type;
var_job emp.job%type;
begin
select ename,job into var_ename,var_job from emp where empno=7369;
dbms_output.put_line('姓名:'||var_ename||'职位:'||var_job);
end;
/(2)record
record类型也称作“记录类型”,使用该类型的变量可以存储由多个列值组成的一行数据。在声明记录类型变量之前,首先需要定义记录类型,然后才可以声明记录类型的变量。记录类型是一种结构化的数据类型,它使用type语句进行定义,在记录类型的定义结构中包含成员变量及其数据类型,其语法格式如下:
type record_type is record
(
var_member1 data_type [not null] [:=default_value],
…
var_membern data_type [not null] [:=default_value])
declare type emp_record is record( var_ename emp.ename%type, var_job emp.job%type ); emp_info emp_record; begin select ename,job into emp_info from emp where empno=7369; dbms_output.put_line('姓名:'||emp_info.var_ename||'职位:'||emp_info.var_job); end; /(3)%rowtype
%rowtype类型的变量结合了“%type类型”和record类型变量的优点,它可以根据数据表中行的结构定义一种特殊的数据类型,用来存储从数据表中检索到的一行数据。它的语法形式很简单,如下所示。
rowVar_name table_name%rowtype;
declare
rowVar_emp emp%rowtype;
begin
select * into rowVar_emp from emp where empno=7369;
dbms_output.put_line('姓名:'||rowVar_emp.ename);
end;
/8、选择语句
(1)if...then语句
if…then语句是选择语句中最简单的一种形式,它只做一种情况或条件判断,其语法格式如下: if < condition_expression> then
plsql_sentence
end if;
begin if age>65 then dbms_output.put_line('可以申请退休'); else dbms_output.put_line('不能申请退休'); end if; end; /(2)if...then...elsif语句
语法格式如下:
if < condition_expression1 > then
plsql_sentence_1;
elsif < condition_expression2 > then
plsql_sentence_2;
…
else
plsql_sentence_n;
end if;
declare month int:=6; begin if month>=1 and month<=3 then dbms_output.put_line('春暖花开'); elsif month>=4 and month<=6 then dbms_output.put_line('烈日炎炎'); elsif month>=4 and month<=6 then dbms_output.put_line('秋高气爽'); else dbms_output.put_line('白雪皑皑'); end if; end; /(3)if...then...else语句
在编写程序的过程中,if…then…else语句是最常用到的一种选择语句,它可以实现判断两种情况,只要if后面的条件表达式为false,程序就会执行else语句下面的PL/SQL语句。其语法格式如下:
if < condition_expression> then
plsql_sentence1;
else
plsql_sentence2;
end if;
declare9、循环结构
age number:=75;
begin if age>65 then dbms_output.put_line('可以申请退休'); else dbms_output.put_line('不能申请退休'); end if; end; /
(1)loop语句(先执行一次循环,再判断)
loop
循环执行的语句块;
exit when 循环结束条件;
循环结束条件修改;
end loop;
(2)while...loop语句while(循环条件) loop
循环执行的语句块;
循环结束条件修改;
end loop;
(3)for语句
for语句有一个循环计数器,通过这个循环计数器来控制循环执行的次数。该计数器可以从小到大进行记录,也可以相反,从大到小进行记录。另外,该计数器值的合法性由上限值和下限值控制,若计数器值在上限值和下限值的范围内,则程序执行循环;否则,终止循环,其语法格式如下。
for variable_ counter_name in [reverse] lower_limit..upper_limit loop
plsql_sentence;
end loop;10、选择和跳转语句
在case关键字的后面有一个选择器,它通常是一个变量,程序就从这个选择器开始执行,接下来是when子句,并且在when关键字的后面是一个表达式,程序将根据选择器的值去匹配每个when子句中的表达式的值,从而实现执行不同的PL/SQL语句,其语法格式如下:
case < selector>
when <expression_1> then plsql_sentence_1;
when <expression_2> then plsql_sentence_2;
…
when <expression_n> then plsql_sentence_n;
[else plsql_sentence;]
end case;
二、系统内置函数
1、字符类函数
ASCII(c)函数 将字符转换为ASCII码
CHR(i)函数 将ASCII码转换为字符
CONCAT(s1,s2)函数连接字符串
INITCAP(s) 函数 将每个单词的首字母大写
2、数字类函数
3、日期和时间类函数
4、转换类函数
5、聚集类函数
相关文章推荐
- [转载]Oracle8 PL/SQL编程风格与系统性能的提高
- win8 系统中安装了oracle11g及PL/SQL Developer如何连接64位oracle
- PL/SQL Developer连接Oracle 11g在Win8 64位系统下乱码
- PL/SQL Developer连接Oracle 11g在Win8 64位系统下乱码
- ORACLE PL/SQL 系统包的使用
- WIN7 64位系统,Oracle 11g 64位,没法使用PL/SQL Developer导出数据
- Oracle PL/SQL之对象权限与系统权限的撤销差异
- win7 64位系统下安装PL/SQL连接Oracle服务器的解决方法
- PL/SQL Developer在64位系统下连接Oracle
- Oracle PL/SQL之对象权限与系统权限的撤销差异
- win7 64系统安装oracle客户端使用PL/SQL Developer工具
- Oracle PL/SQL之对象权限与系统权限的撤销差异
- Oracle PL/SQL之对象权限与系统权限的撤销差异
- Oracle PL/SQL Language Pocket Reference
- Excel 数据 利用pl/sql developer 导入到oracle
- Oracle PL/SQL入门案例实践
- Oracle PL/SQL之LOOP循环控制语句
- Oracle Net Manager 服务命名配置以及用PL/SQL 登陆数据库
- 一起聊编程语言之与哲人(Oracle)对话的PL/SQL
- 用PL/SQL远程连接Oracle