oracle四种数据类型,oracle(4)四种数据类型

在编写pl/sql程序时,可以定义变量和常量

a.标量类型(scalar)

b.复合类型(composite)

c.参照类型(reference)

d.lob(large object)

标量类型(scalar)

1343121683_6378.jpg

1343121745_4750.jpg

1343121723_6024.jpg

declare

c_tax_rate number(3,2):=0.03;

--用户名

--v_ename emp.ename%type;(这种定义灵活)

v_ename varchar2(5);

v_sal number(7,2);

v_tax_sal number(7,2);

begin

--执行

select ename,sal into v_ename,v_sal from emp where empno=&no;

--计算所得税

v_tax_sal:=v_sal*c_tax_rate;

--输出

dbms_output.put_line('姓名是:'||v_ename||'工资:'||v_sal||'交税:'||v_tax_sal);

end;

复合类型(composite)

用于存放多个值的变量。主要报错这几种:

a.pl/sql记录

类似于高级语言中的结构体(可以理解为java中的类),需要注意的是,

当引用pl/sql记录成员时,必须要加记录变量作为前缀(记录变量.记录成员)

b.pl/sql表

相当于高级语言中的数组,但是需要注意的是在高级语言中数组的下标不能为负数,

而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

selectename,sal,job into sp_record

from emp where empno=7788;

dbms_output.put_line('员工名:'||sp_record.name||'工资是'||sp_record.salary);

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

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;

说明:

sp_table_type 是pl/sql表类型

emp.ename%type 指定了表的元素的类型和长度

sp_table 为pl/sql表变量

sp_table(0)则表示下标为0的元素

参照类型(reference)

参照变量是指用于存放数值指针的变量。通过使用参照变量,可以使用应用程序共享相同对象,

从而降低占用的空间。在编写pl/sql程序时,可以使用游标变量(ref cursor)和对象类型变量

(ref obj_type)两种参照变量类型

游标变量(ref cursor)

使用游标时,当定义游标时不需要指定相应的select语句,但是当使用游标时(open时)需要

指定select语句,这样一个游标就与一个select语句结合

案例:

--使用pl/sql编写一个块,可以输入部门号,并显示该部门

declare --定义游标类型 type sp_emp_cursor is ref cursor; --定义一个游标变量 test_cursor sp_emp_cursor; v_ename emp.ename%type; v_sal emp.sal%type; begin --执行 --把test_cursor 和一个select结合 open test_cursor for select ename,sal from emp where deptno=&no; --循环取出 loop     fetch test_cursor into v_ename,v_sal;     --判断工资高低,决定是否...     --判断是否test_cursor为空     exit when test_cursor%notfound;     dbms_output.put_line('名字:'||v_ename||'工资:'||v_sal); end loop; end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值