Oracle DB 函数学习
在 Oracle 中,代码块(PL/SQL 块)是一个基本的单位,可以用来执行 PL/SQL 代码。 PL/SQL 是 Oracle 的一种过程式编程语言,它不仅支持 SQL,还有程序控制结构,如循环、条件语句等。
1. 代码块的组成
PL/SQL 代码块通常由三部分组成:
- 声明部分:`DECLARE`
- 执行部分:`BEGIN`
- 异常处理部分:`EXCEPTION`
DECLARE
-- 变量的声明,可以定义常量、变量、游标等
v_variable_name VARCHAR2(100); -- 定义一个VARCHAR2类型的变量
BEGIN
-- 主体代码,执行具体的操作
SELECT 'Hello World' INTO v_variable_name FROM dual;
DBMS_OUTPUT.PUT_LINE(v_variable_name); -- 输出变量内容
EXCEPTION
-- 异常处理部分,捕获在执行部分可能发生的错误
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现错误: ' || SQLERRM);
-- 输出错误信息
END;
/
- DECLARE:
- 可选部分,用于声明变量、常量、游标、用户定义类型等。
- 可以指定变量的名称和数据类型。
- 例如,
v_variable_name VARCHAR2(100);
声明了一个名为v_variable_name
的字符串变量,其最大长度为 100 个字符。
- BEGIN:
- 必选部分,包含实际的可执行代码。
- 在这里可以编写 SQL 语句、调用子程序、处理逻辑等。
- 使用
SELECT ... INTO
可以将查询结果存入声明的变量中,例如:SELECT 'Hello World' INTO v_variable_name FROM dual;
。
- EXCEPTION:
- 可选部分,处理在执行过程中可能出现的错误。
- 使用
WHEN
语句来定义特定的异常处理方式。 WHEN OTHERS THEN
是一个通用的错误处理程序,它会捕获所有未被列出异常的错误,并输出错误信息。
2. 数据类型
1. 基本数据类型
NUMBER
:用于存储数字,支持整数和小数VARCHAR2
:可变长度字符串,存储字符数据,可以指定最大长度。CHAR
:固定长度字符串DATE
:存储日期和时间数据BOOLEAN
:逻辑类型TRUE
FALSE
NULL
2. %TYPE
和 %ROWTYPE
%TYPE:用于声明变量时引用数据库表的列类型,确保变量和表列的数据类型一致
DECLARE v_emp_name employees.last_name%TYPE; -- employees 表中的 last_name 列的类型
%ROWTYPE:用于声明一个记录变量,这个变量的结构与一张表或视图的整行结构相匹配
DECLARE v_emp_record employees%ROWTYPE; -- 一个包含 employees 表所有列的记录
3. 记录(Record)和表(Table)
记录(Record):类似于结构体,可以存储不同类型的数据集合。用户可以自定义记录的结构。
DECLARE
TYPE employee_record IS RECORD (
id NUMBER,
name VARCHAR2(100)
);
v_employee employee_record; -- 创建一个记录类型的变量
表(Table):PL/SQL 提供了 PL/SQL 表(索引表)用于存储集合。可以视为动态数组。
DECLARE
TYPE number_table IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
v_numbers number_table; -- 创建一个索引表
3. 控制语句
1. 选择结构
- IF
declare
a integer;
begin
a:=5;
if a>5 then
dbms_output.put_line(a+2);
elsif a<2 then
dbms_output.put_line(a-2);
else
dbms_output.put_line(a);
end if;
end;
/
- CASE
declare
a number:=&inputa;
result varchar2(20):=' ';
begin
case a
when 1 then
result:= '选项1';
when 2 then
result:= '选项2';
when 3 then
result:= '选项3';
else
result:= '其他选项';
end case;
dbms_output.put_line(result);
end;
/
2. 循环结构
- LOOP
declare
a number:=0;
begin
loop
dbms_output.put_line('a的值为:'||a);
a:=a+1;
exit when a=5;
end loop;
end;
/