PL/SQL - 数组

Hello, 有志者!今天,我们将一起探索PL/SQL数组的精彩世界。作为你友好的计算机科学老师,我将会一步一步地引导你进行这次旅行。如果你是编程新手,不用担心——我们会从基础开始,逐步深入。所以,拿起你的虚拟记事本,让我们开始吧!

PL/SQL - Arrays

PL/SQL中的数组是什么?

在我们跳入深水区之前,先来了解一下数组是什么。想象你有一堆巧克力,而不是将它们散落在你的桌子上,你决定将它们放在一个整洁的小盒子里。那个盒子就像是数组——它是一个可以存放多个同类型项目的容器。

在PL/SQL中,数组是相同数据类型的元素的集合。它允许你使用单个变量名存储和操作多个值。很方便,对吧?

PL/SQL中的数组类型

PL/SQL提供了三种类型的数组:

  1. 关联数组(索引表)
  2. 嵌套表
  3. 可变大小数组(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

让我们分解这段代码:

  1. 我们声明my_numbers作为我们的VARRAY并将其用5个数字初始化。
  2. 我们使用一个FOR循环遍历数组。
  3. my_numbers.COUNT给我们数组中的元素数量。
  4. 我们使用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