1.1 变量

    首先对于新手来讲要开始一段学习旅程,要从认识变量开始。变量就是可以操纵的数据元素。

  

1.constant 表示声明为一个常量,常量在定义时需要指定初始值,一旦定义其值,不能再被改变。
2.not null 用于约束变量的值不能为空。
3. :=用于为变量赋初始值。

declare
   v_empname  varchar2(20);-- 定义员工名称变量
   v_deptname varchar2(20); --定义部门名称变量
   v_hiredate date  not null :=syadate; -- 定义入职日期变量
   v_empno int    not null default 7369; -- 变量员工编码变量,如果不赋值默认值7369
begin
    null;
end;

 

4. %type 来声明与数据库列相同的类型。
declare
   v_empno emp.empno%type;        --声明一个与数据库emp表的empno同样类型的变量
   v_ename emp.ename%type;        -- 声明一个与数据库emp表的ename 同样类型的变量
   v_hiredate emp.hiredate%type;
begin
   select empno,ename,hiredate
      into v_empno,v_ename,v_hiredate
    from emp
  where empno=&empno;
--输出变量内容
dbms_output.put_line('员工编号:'|| v_empno);
dbms_output.put_line('员工名称:'||v_ename);
dbms_output.put_line('雇佣日期:'||v_hiredate);
end;
5. %rowtype 定义一个包含目标表所有类型的变量类型
declare
   v_empno emp%rowtype;-- 定义emp表的所有列数据
begin
    select * --查询emp表并将结果写入v_emp记录中
      into v_emp
      from emp
     where empno=&empno;
     --输出结果信息
     dbms_output.put_line(v_emp.empno||chr(10)||v_emp.ename);
end;

 

6.%rowtype 同%type一样,只提供类型信息,并不能保证not null 约束
declare
   v_emp emp%rowtype;      -- 定义emp表列类型的记录
begin
     v_emp.empno:=800;       -- 为记录类型赋值
     v_emp.ename:='张三丰';
     v_emp.job:='掌门';
     v_emp.mgr:='7902';
     v_emp.hiredate:=date'2010-12-13';
     v_emp.sal:=8000;
     v_emp.deptno:=20;
     insert into emp values v_emp;  -- 将记录类型插入数据表
end;

 

7. %rowtype定义游标类型的变量
declare
   cursor emp_cursor
   is
   select empno,ename,job,sal,hiredate
     from emp;
  --使用%rowtype定义游标类型的变量
  v_emp emp_cursor%rowtype;
  begin
      open emp_cursor;
      --循环并提取游标数据
      loop
         fetch emp_cursor
          into v_emp;
      -- 要注意游标移动到尾部退出游标
      exit when emp_cursor%notfound;
      -- 输出游标数据
      dbms_output.put_line(v_emp.empno
                          ||''
                          ||v_emp.ename
                          ||''
                          ||v_emp.job
                          ||''
                          ||v_emp.sal
                          ||''
                          || to_char(v_emp.hiredate,'YYYY-MM-DD')
                          );
  end loop;
  --关闭游标
  close emp_cursor;
end;

 

8. 变量的作用域
<outer>>
declare
   v_empname varchar2(20); -- 定义外层块变量
begin
     v_enpname:='张三';-- 为外层外的变量赋初始值
     <<inner>>
     declare
        v_empname varchar2(20);-- 定义与外层块同名的内层块的变量
     begin
          v_empname:='李四';  --为外层块变量赋值
          --输出内层块的变量
          dbms-output.put_line('内层块的员工名称:'||v_empname);
          -- 内层块中访问外层块的变量
          dbms_output.put_line('外层块的员工名称:'||outer.v_empname);
      end;
      dbms_output.put_line('out员工名称:'||v_empname);--在外层块中访问变量
end;
输出为:
内层块的员工名称:李四
外层块的员工名称:张三
out员工名称:张三

 

posted @ 2021-07-15 11:29  马蹄烧饼  阅读(69)  评论(0编辑  收藏  举报