PL/SQL developer基础语法学习(一)之变量

时间:2022-10-04 14:47:06

PL/SQL中的变量

1)、声明

--变量名 类型 :=初始值   v_str varchar2(10):='abc'; 

注意:变量必须在declare语句块中声明。

2)、简单类型

  • number:数字
  • varchar2:变长字符串
  • boolean: 不能输出 true false null
  • date: 日期 to_date to_char
  • char:定长字符串
  • binary_integer: 计数整数
  • long:2G字符串

3)、标识符规则

a、第一个字符必须是字母(v_)

b、变量名最多包含30个字符

c、不要与数据库的表或者列同名

d、每一行只能声明一个变量

e、变量名不能够使用保留字,如 from、select 等

4)、赋值 :=

I、字符类型必须使用单引号;

II、不可以使用group by;

III、可以使用数学操作符或字符串连接操作符。

5)&

接收客户端的输入 。 为占位符

6)、实例

declare
--声明一个字符串
v_str varchar2(20) :='shsxt';
--声明一个整数
v_num number(5) :=10;
--声明一个日期
v_date date :=sysdate;
v_date2 date :=to_date('2017-3-9','yyyy-MM-dd');
--声明一个布尔
v_flag  boolean :=null;
begin
--拼接字符串
dbms_output.put_line(v_str||'-->'||v_num||'-->'||to_char(v_date2,'yyyy-MM-dd'));
--不能输出布尔    
end;

输出结果:
shsxt–>10–>2017-03-09


二、复杂类型

1)、%type :字段类型

获取与指定的字段一致类型,
如 v_empno emp.empno%type;
v_empno2 v_empno%type;
等同于:
v_empno number(4);

2)、%rowtype:行类型

与表结构完全一致,如 v_dept dept%rowtype

实例

/** 数据类型 1、%type -->字段类型 2、%rowtype -->记录类型 */
declare
      --定义字符串 存储 ename的值
      v_ename varchar2(20) :='smith';
      --不用关注字段的类型 与长度 (简化)
      v_name emp.ename%type :='sss';
      --存储一条记录(存在很多 字段)
      v_emp emp%rowtype ;
begin
      v_emp.empno :=100;
      v_emp.sal :=9999;
      dbms_output.put_line('雇员名为:'||v_name||'编号为:'||v_emp.empno||'工资'||v_emp.sal);
end;

3)、table (类似于js数组)

a)、创建类型
集中存放:  type 自定义的类型名 is table of 数据类型
散列存放:  type 自定义的类型名 is table of 数据类型 index by binary_integer

b)、声明变量
集中存放:     变量名  自定义的类型名:= 自定义的类型名(值列表);
散列存放:   变量名  自定义的类型名

实例
(1).散列

declare 
   --1、创建类型
   type t_table is table of dept.dname%type index by binary_integer;
   --2、声明变量
   v_table t_table;   

begin
   --3、使用变量
   v_table(-1) :='shsxt';
   v_table(5) :='bjsxt';
  --v_table('a') :='bjsxt2';
   dbms_output.put_line( v_table(5)||'-->'|| v_table(-1));

end;

(2).集中

declare 
   --集中存储
   --定义类型
   type t_table_deptno is table of dept.deptno%type;
   type t_table_empno is table of emp.empno%type;

   --声明变量
   v_deptno t_table_deptno:=t_table_deptno(20,30,40);
   v_empno t_table_empno :=t_table_empno();
begin
   --使用变量
   dbms_output.put_line(v_deptno(1));
   --访问第四个元素
   v_deptno.extend;
   v_deptno(4):=50;

   --v_empno.extend;
   --v_empno(1):=7898;
   dbms_output.put_line(v_empno(1));
end;

4)、record(结构体)

类似于结构体,由多个不同类型组合而成复杂类型,与 table 相同“先创建结构体后定 义声明变量”。

a)、先创建类型
type 类型名 is record(
字段名1 类型1,
字段名2 类型2,
…..
);
b)、再声明变量
变量名 类型名;

实例:

declare 
     --创建类型
     type t_rec is record(
          empno number(5),
          ename varchar2(20),
          dname dept.dname%type
     );
     --声明变量
     v_rec t_rec;
begin
     --使用变量
     v_rec.empno :=1000;
     v_rec.ename :='xshuaiwen';
     v_rec.dname :='上海';

     dbms_output.put_line(v_rec.dname||'-->'||v_rec.ename);

end;

5)、游标
游标指向结果集的 指针,通过游标 遍历操作结果集

1)、分类
- a.隐式游标(dml语句中)
- b.显式游标(静态游标、ref游标)

2)、标准步骤

1)、创建游标
(2)、声明游标
(3)、打开游标
(4)、使用游标
(5)、关闭游标

3)、四个属性

%rowcount :记录数
%isopen :是否打开
%found: 存在记录
%notfound:没有记录

4)、实例

declare
  --1、创建并声明游标(静态游标)
  cursor cur_emp is select * from emp where sal>3000 order by sal desc;
  v_emp emp%rowtype;

begin 
  --3、打开游标
   open cur_emp;
  --4、使用游标 (获取数据)
   fetch cur_emp into v_emp;
   dbms_output.put_line(v_emp.empno||'-->'||v_emp.ename||'-->'||v_emp.sal);

  --5、关闭游标
  close cur_emp;
exception 
   when  no_data_found then
        dbms_output.put_line('数据未找到'||sqlcode||'-->'||sqlerrm); 
   when too_many_rows then
        dbms_output.put_line('数据超出'||sqlcode||'-->'||sqlerrm); 
   when others then
        dbms_output.put_line('其他异常'||sqlcode||'-->'||sqlerrm); 
end;

后续游标请看下一篇—————————>>>>>>>>>>