Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果没有行,如何返回0_Sql_Oracle - Fatal编程技术网

Sql 如果没有行,如何返回0

Sql 如果没有行,如何返回0,sql,oracle,Sql,Oracle,当没有返回行时,如何使查询中的“CLUSTER\u INSTANCES\u VALUE”返回零。 目标\名称、目标\类型将保持不变,即查询中返回的内容 select TARGET_NAME, TARGET_TYPE,SUBSTR(KEY_VALUE, instr(KEY_VALUE, '.', -1, 1) + 1) as CLUSTER_INSTANCES_VALUE from DBTABLE where METRIC_NAME = 'PARAMETER_VALUES' and VA

当没有返回行时,如何使查询中的“CLUSTER\u INSTANCES\u VALUE”返回零。 目标\名称、目标\类型将保持不变,即查询中返回的内容

select  TARGET_NAME, TARGET_TYPE,SUBSTR(KEY_VALUE, instr(KEY_VALUE, '.', -1, 1) + 1) as CLUSTER_INSTANCES_VALUE 
from DBTABLE  
where METRIC_NAME = 'PARAMETER_VALUES' 
and VALUE like 'cluster_database_instances' 
and TARGET_NAME like '%ORACLE12%'
请建议。谢谢

样本输出:


如果只需要一行,可以使用聚合。以下内容在所有列中返回
NULL

select MAX(TARGET_NAME), MAX(TARGET_TYPE),
       MAX(SUBSTR(KEY_VALUE, instr(KEY_VALUE, '.', -1, 1) + 1)) as CLUSTER_INSTANCES_VALUE 
from DBTABLE  
where METRIC_NAME = 'PARAMETER_VALUES' and
      VALUE like 'cluster_database_instances' and
      TARGET_NAME like '%ORACLE12%';
可以使用
COALESCE()
转换为所需的任何值

如果可能得到多行,则可以使用CTE和union all:

with cte as (
      select TARGET_NAME, TARGET_TYPE,
             SUBSTR(KEY_VALUE, instr(KEY_VALUE, '.', -1, 1) + 1) as CLUSTER_INSTANCES_VALUE 
      from DBTABLE  
      where METRIC_NAME = 'PARAMETER_VALUES' and
            VALUE like 'cluster_database_instances' and
            TARGET_NAME like '%ORACLE12%'
     )
select *
from cte
union all
select '', '', ''   -- replace with the values you really want
from dual
where not exists (select 1 from cte);

您将SUBSTR和INSTR应用于一个字段,因此如果该字段为null,您将得到null。如果要将其替换为0,请使用NVL

select  TARGET_NAME, TARGET_TYPE,SUBSTR(KEY_VALUE, instr(KEY_VALUE, '.', -1, 1) + 1) 1),0) as CLUSTER_INSTANCES_VALUE 
from DBTABLE  
where METRIC_NAME = 'PARAMETER_VALUES' 
and VALUE like 'cluster_database_instances' 
and TARGET_NAME like '%ORACLE12%'
范例

SQL> select substr('A',instr('A',-1,1) ) from dual ;

S
-
A

SQL> select substr(null,instr(null,-1,1) ) from dual ;

S
-


SQL> select nvl(substr(null,instr(null,-1,1) ),0) from dual ;

NVL(SUBSTR(NULL,INSTR(NULL,-1,1)),0)
------------------------------------
                                   0

SQL>

一种方法是使用union all检查是否存在与WHERE子句不匹配的记录,并根据如下集群_实例_值返回0

 select TARGET_NAME
       ,TARGET_TYPE
       ,SUBSTR(KEY_VALUE, instr(KEY_VALUE, '.', -1, 1) + 1) as CLUSTER_INSTANCES_VALUE 
  from DBTABLE  
 where METRIC_NAME = 'PARAMETER_VALUES' 
   and VALUE like 'cluster_database_instances' 
   and TARGET_NAME like '%ORACLE12%'
union all
SELECT '' as TARGET_NAME
       ,'' as TARGET_TYPE
       ,0
  FROM DUAL
 WHERE NOT EXISTS (select null      
                     from DBTABLE  
                    where METRIC_NAME = 'PARAMETER_VALUES' 
                      and VALUE like 'cluster_database_instances')
   and TARGET_NAME like '%ORACLE12%'

添加一个
union all
,该查询在查询中没有返回任何行时返回所需的默认值:

select
  TARGET_NAME,
  TARGET_TYPE,
  SUBSTR(KEY_VALUE, instr(KEY_VALUE, '.', -1, 1) + 1) as CLUSTER_INSTANCES_VALUE
from DBTABLE
where METRIC_NAME = 'PARAMETER_VALUES' 
and VALUE like 'cluster_database_instances'
and TARGET_NAME like '%ORACLE12%'
union all
select null, null, 0
from dual
where not exists (
    select *
    from DBTABLE
    where METRIC_NAME = 'PARAMETER_VALUES' 
    and VALUE like 'cluster_database_instances'
    and TARGET_NAME like '%ORACLE12%'
)

注意:其他改进忽略了以关注手头的任务。

请向我们显示“零”情况下您想要的确切输出。如果您没有任何记录,并且您希望根据群集实例值显示0,那么针对目标名称、目标类型所需的值是什么?您提供的示例输出不支持您的问题“如何让下面查询中的‘CLUSTER_INSTANCES_VALUE’返回零?”?向我们展示该零的示例。对于空行的CLUSTER_INSTANCES_值,它如何显示0?@GeorgeJoseph我收到了代码解释中的注释it…--替换为您真正想要的值“是的,我看到了:-)op希望它显示为0@GeorgeJoseph是的,但OP也没有说明其他列应该有什么值……确切地说;这就是为什么在我的回答中,我将0的值与CLUSTER_INSTANCES_的值相对,并将空字符串与其他两列相对