PL/SQL - 过程:初学者指南

你好啊,未来的PL/SQL魔法师们!今天,我们将踏上一段激动人心的旅程,探索PL/SQL过程的世界。如果你是编程新手,不用担心——我会成为你的友好向导,我们会一步一步地学习。在本教程结束时,你将能够像专业人士一样创建自己的过程!

PL/SQL - Procedures

什么是PL/SQL过程?

在我们开始之前,让我们先了解一下过程是什么。可以把过程想象成烹饪中的可重用食谱。就像你可能有你最喜欢的巧克力曲奇饼的食谱,并且一遍又一遍地使用它,过程就是一组你可以随时调用来执行特定任务的SQL和PL/SQL语句。

PL/SQL子程序的组成部分

现在,让我们分解PL/SQL子程序(包括过程)的解剖结构。这就像理解三明治的不同部分——每个组件都有自己的作用!

  1. 声明部分:这是我们介绍我们的原料(变量、常量等)的地方。
  2. 可执行部分:这里是魔法发生的地方——我们的实际代码在这里。
  3. 异常处理部分:这是我们捕捉可能发生的任何错误的安全网。

下面是一个简单的视觉表示:

DECLARE
-- 声明部分
BEGIN
-- 可执行部分
EXCEPTION
-- 异常处理部分
END;

创建一个过程

让我们卷起袖子,创建我们的第一个过程!我们将从简单开始——一个打印“Hello, World!”的过程。

CREATE OR REPLACE PROCEDURE say_hello IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World!');
END;
/

让我们分解一下:

  • CREATE OR REPLACE PROCEDURE:这告诉Oracle创建一个新的过程或替换具有相同名称的现有过程。
  • say_hello:这是我们给过程的名称。
  • IS:这个关键字将过程头与其体分开。
  • BEGINEND:这些关键字围绕可执行部分。
  • DBMS_OUTPUT.PUT_LINE:这是一个打印文本的内置过程。
  • /:这个斜杠执行整个CREATE PROCEDURE语句。

执行一个独立的过程

太棒了!我们已经创建了我们的过程,但我们如何运行它呢?这就像馅饼一样简单:

BEGIN
say_hello;
END;
/

当你运行这个程序时,你应该会看到打印出“Hello, World!”。恭喜!你已经创建并执行了你的第一个PL/SQL过程!

删除一个独立的过程

有时,我们需要打扫卫生。如果你想要删除一个过程,这是直接的:

DROP PROCEDURE say_hello;

这个命令将删除我们的say_hello过程。小心使用这个力量——能力越大,责任越大!

PL/SQL子程序中的参数模式

现在,让我们通过添加参数使我们的过程更加灵活。在PL/SQL中,参数可以有不同的模式:

模式 描述
IN 传递值到过程中
OUT 从过程中返回值
IN OUT 传递值进入并从过程中返回值

让我们创建一个带有IN参数的过程:

CREATE OR REPLACE PROCEDURE greet_user(p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!');
END;
/

现在我们可以问候不同的用户:

BEGIN
greet_user('Alice');
greet_user('Bob');
END;
/

这将输出:

Hello, Alice!
Hello, Bob!

传递参数的方法

在调用带有参数的过程时,我们有两种主要方法:

  1. 位置表示法:我们按定义的顺序传递参数。
  2. 命名表示法:我们指定每个值对应的参数。

让我们用一个新过程来看到这两种方法:

CREATE OR REPLACE PROCEDURE calculate_rectangle(
p_length IN NUMBER,
p_width IN NUMBER,
p_area OUT NUMBER,
p_perimeter OUT NUMBER
) IS
BEGIN
p_area := p_length * p_width;
p_perimeter := 2 * (p_length + p_width);
END;
/

现在,让我们用两种表示法调用这个过程:

DECLARE
v_area NUMBER;
v_perimeter NUMBER;
BEGIN
-- 位置表示法
calculate_rectangle(5, 3, v_area, v_perimeter);
DBMS_OUTPUT.PUT_LINE('位置表示法:面积 = ' || v_area || ', 周长 = ' || v_perimeter);

-- 命名表示法
calculate_rectangle(p_width => 3, p_length => 5, p_perimeter => v_perimeter, p_area => v_area);
DBMS_OUTPUT.PUT_LINE('命名表示法:面积 = ' || v_area || ', 周长 = ' || v_perimeter);
END;
/

两个调用都会产生相同的结果:

位置表示法:面积 = 15, 周长 = 16
命名表示法:面积 = 15, 周长 = 16

命名表示法在参数很多或想要跳过可选参数时特别有用。

就这样,伙计们!我们已经涵盖了PL/SQL过程的基础,从创建到执行,甚至触及了参数以及如何传递它们。记住,熟能生巧,所以不要害怕用你自己的过程进行实验。

在我们结束之前,这里有一个快速笑话:数据库管理员为什么离开他的妻子?因为她有太多的视图而且没有规范化!

快乐编码,愿你的过程总是成功执行!

Credits: Image by storyset