%rowtype(%rowtype游标)

http://www.itjxue.com  2023-01-26 21:58  来源:未知  点击次数: 

简要的说下 pl/sql里的%type 和 %rowtype 区别!

%TYPE:

定义一个变量,其数据类型与已经定义的某个 数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE。

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

使用%ROWTYPE 特性的优点在于:

1.所引用的数据库中列的个数和数据类型可以不必知道。

2.所引用的数据库中列的个数和数据类型可以实时改变。

Oracle %rowtype的用法

表示该类型为行数据类型,存储的是一行数据,一行数据里可以有多列,类似于表里的一行数据,也可以是游标里的一行数据,如:

vs_row1 表%rowtype;

vs_row2 游标%rowtype;

type和%rowtype分别代表什么含意

熟悉PL/SQL的同志都知道,%type和%rowtype常用来在PL/SQL中定义变量.

%type和%rowtype都是在database中定义的类型,使用%type和%rowtype的好处是

1)减少PL/SQL代码的维护成本

2)自适应表结构的变化[比如字段的长度,精度发生变化]

%TYPE

%TYPE用来声明一个变量和指定表的column一样的数据类型,比如

DECLARE

v_EmpName emp.ename%TYPE;

BEGIN

SELECT ename INTO v_EmpName FROM emp WHERE ROWNUM = 1;

DBMS_OUTPUT.PUT_LINE('Name = ' || v_EmpName);

END;

/

%ROWTYPE

%ROWTYPE用来声明一个和表中记录一样的record.如

DECLARE

v_emp emp%ROWTYPE;

BEGIN

v_emp.empno := 10;

v_emp.ename := 'XXXXXXX';

END;

/

DECLARE

v_EmpRecord emp%ROWTYPE;

BEGIN

SELECT * INTO v_EmpRecord FROM emp WHERE ROWNUM = 1;

DBMS_OUTPUT.PUT_LINE('Name = ' || v_EmpRecord.ename);

DBMS_OUTPUT.PUT_LINE('Salary = ' || v_EmpRecord.sal);

END;

/

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 语句对记录变量进行赋值,, 只要保证记录字段与查询结果列表中的字段相配即可。

(责任编辑:IT教学网)

更多

推荐浏览器文章