OCP-1Z0-051 第93题 NVL函数

本文通过一道OCP-1Z0-051考试中的题目,探讨了如何在SQL中使用NVL函数处理数值类型与字符串类型的转换,特别是在涉及到空值(null)时的正确做法。在生成报表时,需要为所有客户增加15%的信用限制,对于没有信用限制的客户,显示'Not Available'。通过分析错误示例,得出正确的SQL语句应该先将数值乘以15%,再使用TO_CHAR转换为字符串,以确保NVL函数的参数类型匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、原题
View the Exhibit and examine the structure of the CUSTOMERS table.

Using the CUSTOMERS table,you need to generate a report that shows an increase in the credit limit by 15% for all customers. Customers whose credit limit has not been entered should have the message "Not Available" displayed.
Which SQL statement would produce the required result?
A. SELECT NVL(cust_credit_limit,'Not Available')*.15 "NEW CREDIT"
        FROM customers;

B. SELECT NVL(cust_credit_limit*.15,'Not Available') "NEW CREDIT"
        FROM customers;

C. SELECT TO_CHAR(NVL(cust_credit_limit*.15,'Not Available')) "NEW CREDIT"
        FROM customers;

D. SELECT NVL(TO_CHAR(cust_credit_limit*.15),'Not Available') "NEW CREDIT"
        FROM customers;


答案:D

二、题目翻译
下面是CUSTOMERS表的结构:
根据CUSTOMERS表生成一个报表,显示所有客户增长15%的credit limit.如果客户没有credit limit则显示Not Available.
哪个SQL语句给出所需结果?

三、题目解析
A、B、C选项不正确,原因类似,NVL函数第一个参数是number类型,第二个参数是字符类型,无法隐式转换。
D选项正确,先将cust_credit_limit * 0.15,这是数值类型,用to_char转成字符类型,nvl的两个参数类型一致,就正确了。
四、测试
这里,使用oracle已经有的测试表emp,其中comm列有null值,测试如下:

SQL> SELECT NVL(comm,'Not Available')*.15 "NEW CREDIT"
  2  FROM emp;
SELECT NVL(comm,'Not Available')*.15 "NEW CREDIT"
                *
ERROR at line 1:
ORA-01722: invalid number

SQL> SELECT NVL(comm*.15,'Not Available') "NEW CREDIT"
  2  FROM emp;
SELECT NVL(comm*.15,'Not Available') "NEW CREDIT"
                    *
ERROR at line 1:
ORA-01722: invalid number

SQL> SELECT TO_CHAR(NVL(comm*.15,'Not Available')) "NEW CREDIT"
  2  FROM emp;
SELECT TO_CHAR(NVL(comm*.15,'Not Available')) "NEW CREDIT"
                            *
ERROR at line 1:
ORA-01722: invalid number

SQL> SELECT NVL(TO_CHAR(comm*.15),'Not Available') "NEW CREDIT"
  2  FROM emp;

NEW CREDIT
----------------------------------------------------------------
Not Available
45
75
Not Available
210
Not Available
Not Available
Not Available
Not Available
0
Not Available
Not Available
Not Available
Not Available

14 rows selected.

NVL函数的详细用法,参考:
        http://blog.csdn.net/holly2008/article/details/25251513

背景描述 2016 年全球生态足迹 您所在国家消耗的资源是否超过一年产生的资源? 数据说明 上下文 生态足迹衡量的是特定人口生产其消耗的自然资源(包括植物性食品和纤维产品、牲畜和鱼产品、木材和其他林产品、城市基础设施的空间)和吸收其废物(尤其是碳排放)所需的生态资产。该足迹跟踪了六类生产性表面积的使用情况:农田、牧场、渔场、建成区(或城市)土地、森林面积和土地上的碳需求。 一个国家的生物承载力代表其生态资产的生产力,包括农田、牧场、林地、渔场和建筑用地。这些区域,尤其是如果不采伐,也可以吸收我们产生的大部分废物,尤其是我们的碳排放。 生态足迹和生物承载力都以全球公顷表示,即具有全球可比性的标准化公顷数与世界平均生产力。 如果一个种群的生态足迹超过该地区的生物承载力,则该区域就会出现生态赤字。它对其陆地和海洋所能提供的商品和服务的需求——水果和蔬菜、肉类、鱼类、木材、服装用棉花和二氧化碳吸收——超过了该地区生态系统可以更新的需求。生态赤字地区通过进口、变现自己的生态资产(如过度捕捞)和/或向大气中排放二氧化碳来满足需求。如果一个地区的生物承载力超过其生态足迹,它就拥有生态保护区。 确认 生态足迹测量是由不列颠哥伦比亚大学的 Mathis Wackernagel 和 William Rees 构思的。生态足迹数据由 Global Footprint Network 提供。 灵感 您的国家是否存在生态赤字,消耗的资源超过了每年的产量?哪些国家的生态赤字或保护区最大?他们的消费量是比普通国家少还是多?2017 年地球超载日,即日历上人类使用一年自然资源的日子,何时发生?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值