变量

变量

Plsql编程中常见的变量分为两大类:

1. 普通数据类型(char,varchar2,date,number,boolean,long)

2. 特殊变量类型(引用型变量,记录型变量)

声明变量的方式为:

变量名 变量类型(变量长度) 例如:v_name varchar2(20)

普通变量

变量赋值的方式有两种:

1. 直接赋值语句 := 比如: v_name :=’zhangsan’

2. 语句赋值,使用select ...into...赋值:(语法 select 值 into 变量)

示例:打印人员个人信息,包括:姓名,薪水,地址

-- Created on 2020/12/12 by zyq
declare 
  -- Local variables here
  --姓名
  v_name varchar2(20) :='zhangsan';
  --薪水
  v_sal number;
  --地址
  v_addr varchar2(200);
begin
  -- Test statements here
  --直接赋值
  v_sal :=1580;
  --语句赋值
  select '北京市通州区' into v_addr from dual;
  --打印输出
  dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal||',地址:'||v_addr);
end;

执行输出结果:

姓名:zhangsan,薪水:1580,地址:北京市通州区

引用型变量

变量的类型和长度取决于表中字段的类型和长度

通过表名.列名%type指定变量的类型和长度,例如:v_name emp.ename%type;

[示例]查询emp表中的7839号员工的个人信息,打印姓名和薪水

使用普通变量的方式:

-- Created on 2020/12/12 by zyq
declare 
  -- Local variables here
  --姓名
  v_name varchar2(20) :='zhangsan';
  --薪水
  v_sal number;
 
begin
  -- Test statements here
  SELECT a.ename,a.sal into v_name,v_sal FROM emp a WHERE a.empno='7839';
 **--打印输出**
 dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal);

end;

使用引用型变量的方式:

dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal);

end;

使用引用型变量的方式:

-- Created on 2020/12/12 by zyq
declare 
  -- Local variables here
  --姓名
  v_name emp.ename%type;
  --薪水
  v_sal emp.sal%type;
 
begin
  -- Test statements here
  SELECT a.ename,a.sal into v_name,v_sal FROM emp a WHERE a.empno='7839';

  --打印输出
  dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal);
end;

引用型变量的好处:

使用普通变量定义方式,需要知道表中列的类型,而使用引用类型,不需要考虑列的类型,使用%type是非常好的编程风格,因为他是的plsql更加灵活,更加适应于对数据库定义的更新。

记录型变量

解释:记录型变量,就是将整个表中的一行记录的所有字段同时声明出来。

-- Created on 2020/12/12 by zyq
declare 
  -- Local variables here
  --记录型变量
  v_emp emp%rowtype;
  
 
begin
  -- Test statements here
  SELECT * into v_emp FROM emp a WHERE a.empno='7839';

  --打印输出
  dbms_output.put_line('姓名:'||v_emp.ename||',薪水:'||v_emp.sal);
end;

如果有一个表,有100个字段,那么你程序中如果要使用这100个字段的话,如果你使用引用型变量一个个声明,会特别的麻烦,记录型变量可以方便的解决这个问题

错误的使用:

1. 记录型变量只能存储一个完整的行数据

原文地址:https://www.cnblogs.com/dongyaotou/p/14204209.html