首先对于新手来讲要开始一段学习旅程,要从认识变量开始。变量就是可以操纵的数据元素。
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员工名称:张三