PL/SQL - 数组
Hello, 有志者!今天,我们将一起探索PL/SQL数组的精彩世界。作为你友好的计算机科学老师,我将会一步一步地引导你进行这次旅行。如果你是编程新手,不用担心——我们会从基础开始,逐步深入。所以,拿起你的虚拟记事本,让我们开始吧!
PL/SQL中的数组是什么?
在我们跳入深水区之前,先来了解一下数组是什么。想象你有一堆巧克力,而不是将它们散落在你的桌子上,你决定将它们放在一个整洁的小盒子里。那个盒子就像是数组——它是一个可以存放多个同类型项目的容器。
在PL/SQL中,数组是相同数据类型的元素的集合。它允许你使用单个变量名存储和操作多个值。很方便,对吧?
PL/SQL中的数组类型
PL/SQL提供了三种类型的数组:
- 关联数组(索引表)
- 嵌套表
- 可变大小数组(VARRAYs)
现在,让我们专注于VARRAYs,因为它们是初学者的一个好起点。
创建Varray类型
VARRAY(可变大小数组)是PL/SQL中具有最大大小限制的数组类型。这就像买了一个有固定分隔的巧克力盒——你不能添加比盒子能容纳的更多的巧克力!
以下是如何创建VARRAY类型:
CREATE OR REPLACE TYPE number_array AS VARRAY(5) OF NUMBER;
让我们分解一下:
-
CREATE OR REPLACE TYPE
:这告诉Oracle创建一个新的类型或替换现有的类型。 -
number_array
:这是我们给新类型的名称。 -
AS VARRAY(5)
:我们将其定义为一个最大5个元素的VARRAY。 -
OF NUMBER
:这个数组中的每个元素都将是一个NUMBER数据类型。
现在,让我们看看如何在PL/SQL块中使用这个VARRAY:
DECLARE
my_numbers number_array := number_array(10, 20, 30, 40, 50);
BEGIN
FOR i IN 1..my_numbers.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('元素 ' || i || ': ' || my_numbers(i));
END LOOP;
END;
/
输出:
元素 1: 10
元素 2: 20
元素 3: 30
元素 4: 40
元素 5: 50
让我们分解这段代码:
- 我们声明
my_numbers
作为我们的VARRAY并将其用5个数字初始化。 - 我们使用一个FOR循环遍历数组。
-
my_numbers.COUNT
给我们数组中的元素数量。 - 我们使用
my_numbers(i)
来访问每个元素并打印它。
使用VARRAY
现在我们已经创建并初始化了一个VARRAY,让我们探索一些我们可以对它执行的操作。
添加元素
记住,我们不能添加超过我们定义的最大大小的元素。让我们尝试添加一个元素:
DECLARE
my_numbers number_array := number_array(10, 20, 30);
BEGIN
my_numbers.EXTEND;
my_numbers(4) := 40;
FOR i IN 1..my_numbers.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('元素 ' || i || ': ' || my_numbers(i));
END LOOP;
END;
/
输出:
元素 1: 10
元素 2: 20
元素 3: 30
元素 4: 40
在这里,我们使用EXTEND
来增加数组的大小,然后给新元素赋值。
移除元素
我们也可以从数组的末尾移除元素:
DECLARE
my_numbers number_array := number_array(10, 20, 30, 40, 50);
BEGIN
my_numbers.TRIM(2); -- 移除最后2个元素
FOR i IN 1..my_numbers.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('元素 ' || i || ': ' || my_numbers(i));
END LOOP;
END;
/
输出:
元素 1: 10
元素 2: 20
元素 3: 30
TRIM
方法从数组的末尾移除元素。
VARRAY的常用方法
以下是一个你可以与VARRAY一起使用的常用方法表:
方法 | 描述 |
---|---|
COUNT | 返回数组中的元素数量 |
FIRST | 返回第一个元素的索引 |
LAST | 返回最后一个元素的索引 |
LIMIT | 返回数组最大大小 |
EXTEND | 增加数组的大小 |
TRIM | 减少数组的大小 |
EXISTS | 检查特定索引处的元素是否存在 |
实际示例:学生成绩
让我们通过一个实际示例来应用我们的知识。想象你是一名老师(就像我一样!),你想存储并计算一个学生的平均成绩:
CREATE OR REPLACE TYPE grade_array AS VARRAY(5) OF NUMBER;
DECLARE
student_grades grade_array := grade_array(85, 90, 78, 92, 88);
total_score NUMBER := 0;
average_score NUMBER;
BEGIN
-- 计算总分
FOR i IN 1..student_grades.COUNT LOOP
total_score := total_score + student_grades(i);
END LOOP;
-- 计算平均分
average_score := total_score / student_grades.COUNT;
DBMS_OUTPUT.PUT_LINE('平均分数: ' || ROUND(average_score, 2));
END;
/
输出:
平均分数: 86.6
这个示例展示了如何使用VARRAY来存储学生的成绩,然后计算并显示他们的平均分数。
结论
恭喜!你已经迈出了进入PL/SQL数组世界的第一步。我们已经覆盖了VARRAY的基础,如何创建和操作它们,甚至将它们用于实际应用。记住,数组就像巧克力盒子——它们使你的数据保持有序且易于访问。在你继续编程之旅时,你会发现数组是你编码工具箱中非常有用的工具。
继续练习,保持好奇心,不要害怕尝试。在你意识到之前,你将会用你的PL/SQL技能让每个人感到惊讶!(抱歉,我忍不住开了一个小玩笑。)
快乐编码,未来的数据库巫师们!
Credits: Image by storyset