pl/sql程序中中的变量和常量

一、类型

 a.标量类型(scalar)

 b.符合类型(composite)

 c.参照类型(reference)

 d.lob(large object)

1.标量的定义与使用

   定义一个变长字符串 v_ename varchar2(10)

  定义一个小数 v_sal number(6,2)

  定义一个小数并赋初值   v_sal2 number(6,2):=5.4

  定义一个日期类型数据  v_hiredate date

  定义一个布尔变量,不能为空,初始值为false   v_valid boolean not null default false;

案例:输入员工号,显示员工的姓名,工资,个人所得税(0.03)

 declare
 c_tax_rate number(3,2):=0.03;
 v_ename varchar2(10);
 v_sal number(7,2);
 v_tax_number number(7,2);
 begin
 --执行部分
 select ename,sal into v_ename,v_sal from emp where empno=&no;
 --计算所得税
 v_tax_number:=v_sal*c_tax_rate;
 --输出
 dbms_output.put_line('姓名是:'||v_ename||'工资:'||v_sal||'交税'||v_tax_number);
 end;

标量使用%type定义标量的类型

eg: v_ename  emp.ename%type;

2.复合变量  用于存放多个值得变量

a.pl/sql记录(类似高级语言的结构体)

b.pl/sql 表

c.嵌套表

d.varray

--定义一个pl/sql记录
 declare
 --定义一个pl/sql记录类型   emp_record_type,类型包含三个数据name,salary,title
 type emp_record_type is record(name emp.ename%type,salary  emp.sal%type ,title emp.job%type);
 --定义一个sp_record变量,这个变量类型是emp_record_type
 sp_record emp_record_type;
 begin
 select ename,sal,job into sp_record from emp where empno='7788';
 dbms_output.put_line('姓名:'||sp_record.name||'薪水'||sp_record.salary||'工作'||sp_record.title);
 end;

 --定义一个pl/sql表实例
 declare
 --定义一个pl/sql表实例sp_table_type,该类型用于存放emp.ename%type,index by binary_integer表示下标是整数
 type sp_table_type is table of emp.ename%type index by binary_integer;
 sp_table  sp_table_type;
 begin
 select ename into sp_table(0) from emp where empno=7788;
 dbms_output.put_line('员工名'||sp_table(0));
 end;

3.参照变量  

   参照变量是指用于存放数值指针的变量。通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间。

   在编写pl/sql程序时,可以使用游标变量(ref cursor)和对象类型变量(ref_obj_type)两总参照变量类型。

   游标类型(ref cursor)

   使用游标时,当定义游标是不需要指定相应的select语句,但是当使用游标时(open)需要指定select语句,这样一个游标就与一个select语句想结合了。

   案例:使用批量pl/sql编写一个快,可以输入部门号,并显示该部门的所有员工姓名和工资。

   declare

    type sp_emp_cursor   is  ref  cursor;

    test_coursor sp_emp_cursor;

    v_ename emp.ename%type;

    v_sal emp.sal%type;

    begin

    open test_cursor  for select ename,sal from emp where  deptno=&no;

    loop

    fetch test_corsor into v_ename,v_sal;

    exit when  test_cursor%notfound;

    dbms_output.put_line('名字'||v_ename||'工资'||v_sal);

    end loop;

    close test_cursor;

     end;





你可能感兴趣的:(oracle)