PL/SQL Challenge 每日一题:2016-5-9 %TYPE属性

[复制链接]
查看11 | 回复9 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
(原发表于 2011-3-23)
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:_Nikotin
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我创建了如下的表和数据,然后我执行了一个代码块。
CREATE TABLE plch_employees
(
employee_id INTEGER
, last_name VARCHAR2 (100)
, salaryNUMBER
)
/
BEGIN
INSERT INTO plch_employees
VALUES (12345678901234567890123456789012345678901, 'Jobs', 1000000);
INSERT INTO plch_employees
VALUES (12345678901234567890123456789012345678902, 'Ellison', 1000000);
INSERT INTO plch_employees
VALUES (12345678901234567890123456789012345678903, 'Gates', 1000000);
COMMIT;
END;
/
哪些选项显示了下列代码块执行之后屏幕上会看到什么?
DECLARE
l_employee_id plch_employees.employee_id%TYPE;
l_cnt PLS_INTEGER := -1;
l_errmsgVARCHAR2 (30);
BEGIN
BEGIN
SELECT employee_id, COUNT (*)

INTO l_employee_id, l_cnt

FROM plch_employees
GROUP BY employee_id;
l_errmsg := 'NO ERROR';
EXCEPTION
WHEN VALUE_ERROR
THEN
l_errmsg := 'VALUE_ERROR';
WHEN TOO_MANY_ROWS
THEN
l_errmsg := 'TOO_MANY_ROWS';
END;
DBMS_OUTPUT.put_line (l_cnt);
DBMS_OUTPUT.put_line (l_errmsg);
END;
/
(A)
-1
VALUE_ERROR
(B)
-1
TOO_MANY_ROWS
(C)
3
NO ERROR
(D)
1
NO ERROR

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
B多个结果into 应该会报错为 TOO_MANY_ROWS
既然结果过多 那么不会有数值被插入!!!
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
B
employee_id 分组返回多行查询语句会直接报错l_cnt仍为初始值
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
我选择A 既然程序报错了,就应该直接跳到VALUE_ERROR 里。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
mervynit 发表于 2016-5-11 11:32
B多个结果into 应该会报错为 TOO_MANY_ROWS
既然结果过多 那么不会有数值被插入!!!

竟然是A
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
有个疑问,INTEGER 在oracle是number(38),为什么在插入表数据的时候不报错 在给变量赋值的时候才报错?12345678901234567890123456789012345678901 已经超过38了
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
btoo_many_rows
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
wuwubing321 发表于 2016-5-11 14:50
btoo_many_rows

经常遇到这种错误,取出来数是3条 这样into 就会出现 too_many_rows虽然也考虑到了integer 默认为number(38) 但既然插入表的时候 没有报错这样,在程序块里应该会先报too_many_rows
虽然我知道这种题一般都是比较曲折的,很有可能是a value_error 因为我不清楚too_many_rows是不是插入第二条的时候 才报出来 如果是的话 插入第一条的时候 l_employee_id 放不下41位数字 会报 a value_error 所以我还是选择a吧 这样 答对的概率大一点
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
字段里面integer 可以存储1.0e125 ,但不清楚取出来放到变量里面 ,就不行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行