Oracle--PL/SQL、系统内置函数

本文介绍了PL/SQL的基础知识,包括程序块结构、变量与常量定义、数据类型、选择与循环语句等内容,并概述了系统内置函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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])

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;
declare
 age number:=75;
begin
 if age>65 then
  dbms_output.put_line('可以申请退休');
else 
  dbms_output.put_line('不能申请退休');
end if;
end;
/

9、循环结构

(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、聚集类函数



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值