pl/sql数据类型_%type
来源:互联网 发布:血色婚礼 知乎 编辑:程序博客网 时间:2024/05/21 12:51
现在pl/sql命令窗口中执行这段代码
--输入员工工号,计算个人所得税并输出
declare
c_tax_rate number(3,2):=0.03;
--用户名
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;
如果我们输入一个员工工号是7654,那么会引发错误:ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ORA-06512: 在 line 9
仔细分析这个原因:其实不难发现7654号员工的姓名是MARTIN他是六个字符,
而我们定义的v_ename 类型和大小是varchar(5)只有5个字符的变量,所以会错,
可是我们在执行之前,也不可能知道员工的姓名究竟是多少位,如果可变字符定义的过长不出错,可是浪费内存
所以要必要使用%type来解决这个问题。
%type的语法格式如下
标识符(变量名) 表名称.列名称%type;
这样就可以对定义用户名变量这一行做如下改动:
v_ename emp.ename%type;
它表示的意思就是用户名变量数据类型和大小和表中的当前用户名数据类型大小一致,
表中是五个可变字符的话,此处v_ename也就是五个可变字符
如果表中是六个可变字符的话,此处v_ename就是六个可变字符。
这样其他变量如果接收的是表中数据,定义也可以照这样去改
改后代码如下:
--输入员工工号,计算个人所得税并输出
declare
c_tax_rate number(3,2):=0.03;
--用户名
v_ename emp.ename%type;
v_sal emp.sal%type;
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;
/
- pl/sql数据类型_%type
- 触发器和pl/sql数据类型_标量
- pl/sql变量--%TYPE
- oracle pl sql %type
- PL/SQL %TYPE 属性
- pl/sql %TYPE
- pl/sql数据类型
- PL/SQL中的数据类型
- PL/SQL数据类型
- PL/SQL数据类型
- PL/SQL数据类型
- PL/SQL的数据类型
- pl/sql块数据类型
- PL/SQL--复杂数据类型
- SQL,PL/SQL 数据类型一览表
- SQL,PL/SQL 数据类型一览表
- Oracle基本操作八:PL/SQL特殊数据类型%type %rowtype VARRAY TABLE RECORD
- 第三章 PL/SQL数据类型
- ZOJ Monthly, July 2011 - G Tree of Three(树形DP)
- w
- Boost.Function 用法
- USACO Agri-Net,最小生成树
- Git 管理多个分支的公共部分 How to manage the common part of multiple branches
- pl/sql数据类型_%type
- 酷壳网心得
- USACO Score Inflation,完全背包问题
- C# 排序算法
- 黑马程序猿-lesson7IO
- 杂7杂8
- B/S和C/S的区别
- 24 小时教会你IPAD编程 - 第一小时
- Android screen size and densities.