PL/SQL - 变量:初学者指南

你好,未来的PL/SQL大师们!今天,我们将踏上一段激动人心的旅程,探索PL/SQL变量的世界。别担心如果你是编程新手——我将作为你的友好向导,我们会一步步来。在本教程结束时,你将像专业人士一样熟练地处理变量!

PL/SQL - Variables

变量是什么?

在我们深入之前,让我们先了解一下变量是什么。可以将变量想象成你电脑内存中的小容器,它们用来存储数据。就像你可能会在房间里使用不同的箱子来存放不同类型的物品一样,我们使用变量在程序中存储不同类型的数据。

PL/SQL中的变量声明

在PL/SQL中,声明一个变量就像向某人介绍自己一样。你告诉程序:“嘿,我在这里,这是我所能持有的!”

基本语法

PL/SQL中声明变量的基本语法是:

变量名 数据类型;

让我们分解一下:

  • 变量名 是你选择给你的变量起的名称
  • 数据类型 是变量可以持有的数据类型

示例

DECLARE
my_name VARCHAR2(50);
my_age NUMBER;
is_student BOOLEAN;
BEGIN
-- 你的代码在这里
END;

在这个示例中:

  • my_name 可以持有最多50个字符
  • my_age 可以持有数字
  • is_student 可以是TRUE或FALSE

记住,在PL/SQL中,我们在DECLARE部分声明变量,在BEGIN语句之前。

常见数据类型

以下是你将遇到的一些常见数据类型:

数据类型 描述 示例
VARCHAR2 可变长度字符字符串 'Hello, World!'
NUMBER 数值 42, 3.14
DATE 日期和时间值 '01-JAN-2023'
BOOLEAN 逻辑值 (TRUE/FALSE) TRUE

PL/SQL中的变量初始化

现在我们已经声明了变量,让我们给它们一些值!这个过程被称为初始化。

基本初始化

你可以在声明变量时立即初始化它:

DECLARE
greeting VARCHAR2(20) := 'Hello, PL/SQL!';
lucky_number NUMBER := 7;
BEGIN
DBMS_OUTPUT.PUT_LINE(greeting);
DBMS_OUTPUT.PUT_LINE('我的幸运数字是: ' || lucky_number);
END;

在这个示例中,我们向PL/SQL问好,并分享我们的幸运数字。:= 是PL/SQL中的赋值运算符。

使用NULL初始化

有时,你可能想要声明一个变量,但尚未给它赋予一个值。在这种情况下,你可以使用NULL:

DECLARE
user_input VARCHAR2(100) := NULL;
BEGIN
-- 我们稍后会获取用户输入
END;

PL/SQL中的变量作用域

变量作用域就像变量的邻里——它定义了变量可以被看到和使用的位置。

局部变量

在块中声明的变量对该块是局部的。它们不能在其块外部被看到。

DECLARE
outer_variable VARCHAR2(20) := '我在外面!';
BEGIN
DBMS_OUTPUT.PUT_LINE(outer_variable);

DECLARE
inner_variable VARCHAR2(20) := '我在里面!';
BEGIN
DBMS_OUTPUT.PUT_LINE(outer_variable);  -- 这可以工作
DBMS_OUTPUT.PUT_LINE(inner_variable);  -- 这也可以工作
END;

DBMS_OUTPUT.PUT_LINE(outer_variable);  -- 这可以工作
-- DBMS_OUTPUT.PUT_LINE(inner_variable);  -- 这将导致错误
END;

在这个示例中,inner_variable 就像一个害羞的朋友,只在内层块派对中出现。外层块看不到它!

全局变量

如果你希望一个变量在程序的任何地方都可见,你可以在最外层块中声明它。

DECLARE
global_var NUMBER := 100;

PROCEDURE print_global IS
BEGIN
DBMS_OUTPUT.PUT_LINE('全局变量值: ' || global_var);
END;

BEGIN
print_global;
global_var := global_var + 50;
print_global;
END;

在这里,global_var 就像一个受欢迎的孩子——每个人都知道他们,并且可以与他们互动!

将SQL查询结果赋值给PL/SQL变量

PL/SQL最酷的事情之一就是它与SQL的无缝集成。你可以使用SQL查询来给PL/SQL变量赋值!

单行查询

DECLARE
employee_name VARCHAR2(100);
employee_salary NUMBER;
BEGIN
SELECT first_name || ' ' || last_name, salary
INTO employee_name, employee_salary
FROM employees
WHERE employee_id = 100;

DBMS_OUTPUT.PUT_LINE('员工: ' || employee_name);
DBMS_OUTPUT.PUT_LINE('薪水: $' || employee_salary);
END;

在这个示例中,我们从employees表中获取一个员工的姓名和薪水,并将它们存储在我们的PL/SQL变量中。

多行查询

对于多行,我们需要使用游标或批量收集。以下是一个使用批量收集的示例:

DECLARE
TYPE name_table_type IS TABLE OF VARCHAR2(100);
employee_names name_table_type;
BEGIN
SELECT first_name || ' ' || last_name
BULK COLLECT INTO employee_names
FROM employees
WHERE department_id = 60;

FOR i IN 1..employee_names.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('员工 ' || i || ': ' || employee_names(i));
END LOOP;
END;

这个脚本从部门60中获取所有员工的姓名,并将它们存储在PL/SQL表中。然后我们遍历这个表来打印每个姓名。

就这样,伙计们!我们已经涵盖了PL/SQL变量的基础知识,从声明到初始化,作用域,甚至如何用SQL查询结果填充它们。记住,熟能生巧,所以不要害怕尝试这些概念。

在我离开之前,这里有一个程序员笑话给你:程序员为什么辞职?因为他得不到数组(加薪)!?

快乐编码,愿你的变量总是表现良好!

Credits: Image by storyset