PL/SQL - 变量:初学者指南
你好,未来的PL/SQL大师们!今天,我们将踏上一段激动人心的旅程,探索PL/SQL变量的世界。别担心如果你是编程新手——我将作为你的友好向导,我们会一步步来。在本教程结束时,你将像专业人士一样熟练地处理变量!
变量是什么?
在我们深入之前,让我们先了解一下变量是什么。可以将变量想象成你电脑内存中的小容器,它们用来存储数据。就像你可能会在房间里使用不同的箱子来存放不同类型的物品一样,我们使用变量在程序中存储不同类型的数据。
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