PL/SQL中使用%TYPE和%ROWTYPE的差别

%TYPE

         定义一个变量。其数据类型与已经定义的某个 数据变量的类型同样,或者与数据库表的某个列的数据类型
同样,这时能够使用%TYPE。
        使用%TYPE 特性的长处在于:

              1.所引用的数据库列的数据类型能够不必知道;
              2. 所引用的数据库列的数据类型能够实时改变。

declare
  --定义一个记录类型
  type emp_record is record(
    v_name employees.last_name%type,
    v_email employees.email%type,
    v_salary employees.salary%type,
    v_job_id employees.job_id%type);
    
  --声明自己定义记录类型的变量
  v_emp_record emp_record;
begin
  --通过 select ... into ... 语句为变量赋值
 select last_name, email, salary, job_id into v_emp_record
 from employees
 where employee_id = 101;
 
 -- 打印变量的值
 dbms_output.put_line(v_emp_record.v_name || ', ' || v_emp_record.v_email || ', ' ||  
                                        v_emp_record.v_salary || ', ' ||  v_emp_record.v_job_id);
end;
返回结果:

Kochhar, NKOCHHAR, 17000, AD_VP
PL/SQL procedure successfully completed


%ROWTYPE
           PL/SQL 提供%ROWTYPE  操作符,  返回一个记录类型,  其数据类型和数据库表的数据结构相一致。


          使用%ROWTYPE 特性的长处在于:
                 1.所引用的数据库中列的个数和数据类型能够不必知道。
                 2.所引用的数据库中列的个数和数据类型能够实时改变。


declare
--声明一个记录类型的变量
  v_emp_record employees%rowtype;
begin
  --通过 select ... into ... 语句为变量赋值
 select * into v_emp_record
 from employees
 where employee_id = 101;
 
 -- 打印变量的值
 dbms_output.put_line(v_emp_record.last_name || ', ' || v_emp_record.email || ', ' ||  
                                        v_emp_record.salary || ', ' ||  v_emp_record.job_id  || ', ' ||  
                                        v_emp_record.hire_date);
end;
返回结果:

Kochhar, NKOCHHAR, 17000, AD_VP, 21-9月 -89
PL/SQL procedure successfully completed


记录类型:
          记录类型是把 逻辑相关 的数据作为一个单元存储起来 ,称作 PL/SQL RECORD 的域(FIELD) ,其作用是存放互不同样但逻辑相关的信息。
         定义记录类型语法例如以下:
                 TYPE record_type IS RECORD

                  (
                      Field1 type1 [NOT NULL] [:= exp1 ],
                      Field2 type2 [NOT NULL] [:= exp2 ],
                      . . . . . .
                      Fieldn typen [NOT NULL] [:= expn ]

                  ) ;

提示 : 1) DBMS_OUTPUT.PUT_LINE  过程的功能类似于 Java  中的 System.out.println()  直接将输出结果送到标准输出中 .
          2)  在使用上述过程之前必须将 SQL * PLUS  的环境參数 SERVEROUTPUT  设置为 ON,  否则将看不到输出结果 :  

set serveroutput on

          能够用 SELECT  语句对记录变量进行赋值,, 仅仅要保证记录字段与查询结果列表中的字段相配就可以。

posted on 2017-08-14 08:15  wgwyanfs  阅读(191)  评论(0编辑  收藏  举报

导航