%TYPE、%ROWTYPE、记录类型、表类型

1.%TYPE类型用于隐式地将变量的数据类型指定为对应列的数据类型。语法:
variable_name table_name.column_name%TYPE [ [NOT NULL]{ := | DEFAULT} value];

2.%TYPE类型只针对表中的某一列,而%ROWTYPE类型则针对表中的一行,使用%ROWTYPE类型定义的变量可以存储表中的一行数据。语法:
variable_name table_name%ROWTYPE;

**例子:

SET SERVEROUTPUT ON;
DECLARE
emp_number CONSTANT emp.empno%TYPE := 7900;
one_emp emp%ROWTYPE;
BEGIN
SELECT * INTO one_emp FROM emp WHERE empno = emp_number;
DBMS_OUTPUT.PUT_LINE('查询的员工的编号为:' || emp_number);
DBMS_OUTPUT.PUT_LINE('该员工的姓名为:' || one_emp.ename);
DBMS_OUTPUT.PUT_LINE('该员工的职位为:' || one_emp.job);
END;

3.记录类型与数据库中的表的行结果非常相似,使用记录类型定义的变量可以存储由一个或多个字段组成的一行数据。语法(创建记录类型需要使用TYPE关键字):
TYPE record_name IS RECORD (
field_name data_type [ [NOT NULL] { := | DEFAULT} value]
[,...]);

4.使用记录类型变量只能保存一行数据,这限制了select语句的返回行数,如果select语句返回多行就会报错。Oracle提供了另外一种自定义类型,也就是表类型,它是对记录类型的扩展,允许处理多行数据,类似表。语法:
TYPE table_name IS TABLE OF data_type [NOT NULL] INDEX BY BRINARY_INTEGER;
语法说明:
[list]
[*]table_name:创建的表类型名称。
[*]IS TABLE:表示创建的是表类型。
[*]data_type:可以是任何合法的PL/SQL数据类型。
[*]INDEX BY BRINARY_INTEGER:指定系统创建一个主键索引,用于引用表类型变量中的特定行。
[/list]
**例子:

DECLARE
TYPE my_emp IS TABLE OF emp%ROWTYPE INDEX BY BRINARY_INTEGER;
new_emp my_emp;
BEGIN
new_emp(1).empno := 6800;
new_emp(1).ename := 'TRACY';
new_emp(1).job := 'CLERK';
new_emp(1).sal := 2500;
new_emp(2).empno := 6900;
new_emp(2).ename := 'LUCY';
new_emp(2).job := 'MANAGER';
new_emp(2).sal := 4000;

DBMS_OUTPUT.PUT_LINES(new_emp(1).empno ||','|| new_emp(1).ename);
DBMS_OUTPUT.PUT_LINES(new_emp(2).empno ||','|| new_emp(2).ename);
END;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值