下载帮

您现在的位置是:首页 > 数据库 > Oracle

Oracle

Oracle PL/SQL编程之变量

2022-02-04 12:13Oracle

关于Oracle变量中的点

1、变量必须要声明后才能使用,不能提前使用

2、变量可以在任何程序块中、子程序(函数、存储过程)中使用

3、变量的命名有规则:

1. 变量必须是英文字母开头,支持字母、数字、下划线、美元符号、#
2. 变量的名称最多30个字符
3. 变量名不能与数据库的表或列同名
4. 不能使用Oracle中的关键字
5. 变量不区分大小写,`v_id``v_Id`是同一个变量

变量的声明与初始化

declare
  v_id       number(20) not null := 1;
  v_address  varchar2(50) :='发财市发财路88888';
  v_name     constant varchar2(10) :='郑大钱';
  v_birthday date;
begin
  dbms_output.put_line('v_id:'||v_id);
  dbms_output.put_line('v_address:'||v_address);
  dbms_output.put_line('v_name:'||v_name);
  dbms_output.put_line('v_birthday:'||v_birthday);
end;

输出结果如下:

v_id:1
v_address:发财市发财路88888
v_name:郑大钱
v_birthday:
  1. := 为赋值的符号,当然还有其它为变量赋值的方式,我们后面再说
  2. not null 表示这个变量不能为空,必须在定义的时候就要为其赋值,相当于加了一个约束
  3. constant 关键字限制变量的值不能更改,也就是相当于定义了一个常量
  4. 变量可以声明后,当没有not null约束的时候,不赋值也不会报错,不赋值的变量,Oracle会默认将其初始值设置为空。

建议在声明变量的时候,就为其初始化,否则如果在涉及计算的时候,任何的值与NULL计算的时候,结果都是NULL

值得注意的是,声明的变量每一行结束,都需要加;

变量的声明后重新赋值

declare
  v_id      number(20) not null := 1;
  v_address varchar2(50) := '发财市发财路88888';
  v_name constant varchar2(10) := '郑大钱';
  v_birthday date;
begin
  -- 对v_id 重新赋值
  v_id := '2022';
  dbms_output.put_line('v_id:' || v_id);
  dbms_output.put_line('v_address:' || v_address);
  dbms_output.put_line('v_name:' || v_name);
  dbms_output.put_line('v_birthday:' || v_birthday);
end;

执行结果如下:

v_id:2022
v_address:发财市发财路88888
v_name:郑大钱
v_birthday:

q'操作符

我们在之前说过,Oracle字符串都要放在两个单引号中,但是如果我们字符串中,包含单引号,这个时候该怎么办呢?此时就可以使用q'操作符,示例如下:

declare
  v_id      number(20) not null := 1;
  v_address varchar2(50) := q'@China'Tang@';
  v_name constant varchar2(10) := q'[Magic'C]';
  v_birthday date;
begin
  dbms_output.put_line('v_id:' || v_id);
  dbms_output.put_line('v_address:' || v_address);
  dbms_output.put_line('v_name:' || v_name);
  dbms_output.put_line('v_birthday:' || v_birthday);
end;

输出结果:

v_id:1
v_address:China'Tang
v_name:Magic'C
v_birthday:

我们从上面的中发现,q限bi定符后,一个使用了@,一个使用[,其实不限于这两个,这个定界符,可以指定任意的字符,只要它没有在字符中出现,都可以。

变量的常用基本数据类型

我们在声明变量的时候,需要指定变量的数据类型和长度,在Oracle中,数据的常用基本数据类型如下:

  1. varchar2(size): 不定长字符串类型,size为数据长度,最大32767个字符
  2. char(size): 定长字符串,size为数据长度,最大32767个字符
  3. number(p,s):数值类型,p为数值的位数,s为数值的精度。
  4. boolean: 布尔数据类型,一共三个值: TRUE、FALSE、NULL
  5. date: 日期类型
  6. timestamp:时间戳

char、varchar 和varchar2三者之间的区别:

varchar是标准sql中定义的,而varchar2是oracle所提供的独有的数据类型,varchar对于汉字、全角等字符占两个字节,对于数字,英文字符是一个字节,占的内存小,对于空串,varchar仍按空串处理。

varchar2一般情况下把所有字符都占两字节处理,具体要看字符集情况。比如GBK,汉字就会占两个字节,英文1个;如果是UTF-8,汉字一般占3个字节,英文还是1个,此外varchar2是存放可变长度的字符串,VARCHAR2把空串等同于null处理。

char是一种固定长度的类型,无论存储的数据多少都会固定长度,如果插入的长度小于定义长度,则可以用空格进行填充。所以char可能更会浪费空间。

%TYPE数据类型

在编程中,我们变量最常用的是保存数据库里数据,这就要求数据库中数据要和变量的类型一致,如果我们通过去查询表结构去定义,就太麻烦了,Oracle提供了一种简便的方式,不需要查询表结构,只需要指定表的字段即可,示例如下:

declare
  -- 声明一个%Type类型的变量用来接收ename数据
  v_emp_name emp.ename%TYPE;
begin
  -- 使用select ... into ... 方式为emp赋值
  select ename into v_emp_name from emp where empno='7369';
  dbms_output.put_line('v_emp_name:' || v_emp_name);
end;

执行结果如下:

v_emp_name:SMITH

我们也可以使用%Type,引用自己的定义的变量,示例如下:

declare
  v_name varchar2(20):='郑大钱';
  v_name2 v_name%TYPE:='张三';
begin
  dbms_output.put_line('v_name:' || v_name);
  dbms_output.put_line('v_name2:' || v_name2);
end;

执行结果如下:

v_name:郑大钱
v_name2:张三

%Type属性的变量,不受限于NOT NULL约束

绑定变量(了解)

绑定变量又叫宿主变量,我们之前在语句块声明的变量,在程序运行后,就在内存中释放了,但是绑定变量不一样,在程序块执行完成后,变量依然可以访问,我们也可以理解成全局变量,示例代码如下:

SQL> variable v_name varchar2(20);
SQL> 
SQL> begin
  2    :v_name :='2022';
  3  end;
  4  /

PL/SQL procedure successfully completed

v_name
---------
2022

SQL> print v_name
v_name
---------
2022

SQL> 

引用绑定变量,需要在变量名前加上:

大对象变量

当要存储大量的数据时候,就需要大对象数据类型,主要为两种数据类型:BLOB、CLOB.

1、CLOB:主要存储单字节的大对象

2、BLOB:用于存储大的二进制对象

变量名称命名规范建议

1、v_变量名:普通变量

2、c_变量名:常量

3、p_变量名:替代变量

4、g_变量名:全局变量

文章评论