Sql 选择除null或NVL all null以外的所有列

Sql 选择除null或NVL all null以外的所有列,sql,database,oracle,select,notnull,Sql,Database,Oracle,Select,Notnull,是否有任何方法可以选择记录中字段不为null的所有列,或将null字段NVL到“”? 我在甲骨文公司工作 像这样的 SELECT * IS NOT NULL FROM table WHERE id_table ='001' 还是像这样 SELECT NVL(*,'') FROM table WHERE id_table ='001' 只需在关于的演示中反转NULL逻辑即可 比如说, FIND\u NULL\u COL是一个简单的用户定义函数(UDF),对于至少有一个NULL值的列,该函数将返

是否有任何方法可以选择记录中字段不为null的所有列,或将null字段NVL到“”? 我在甲骨文公司工作

像这样的

SELECT * IS NOT NULL
FROM table
WHERE id_table ='001'
还是像这样

SELECT NVL(*,'')
FROM table
WHERE id_table ='001'

只需在关于的演示中反转
NULL
逻辑即可

比如说,

FIND\u NULL\u COL
是一个简单的用户定义函数(UDF),对于至少有一个
NULL
值的列,该函数将返回1:

SQL> CREATE OR REPLACE
  2    FUNCTION FIND_NULL_COL(
  3        TABLE_NAME  VARCHAR2,
  4        COLUMN_NAME VARCHAR2)
  5      RETURN NUMBER
  6    IS
  7      cnt NUMBER;
  8    BEGIN
  9      CNT :=1;
 10      EXECUTE IMMEDIATE 'select count(1) from '
 11                        ||TABLE_NAME||' where ' ||COLUMN_NAME||' is not null
 12                        and deptno = 20' INTO cnt;
 13      RETURN
 14      CASE
 15      WHEN CNT=0 THEN
 16        1
 17      ELSE
 18        0
 19      END;
 20    END;
 21    /

Function created.
调用SQL中的函数以获取任何表的所有列的空状态:

SQL>   SET pagesize 1000
SQL>   column owner format A10;
SQL>   column column_name format A20;
SQL>   COLUMN TABLE_NAME FORMAT A20;
SQL>   column n format A1;
SQL>   SELECT c.OWNER,
  2      c.TABLE_NAME,
  3      c.COLUMN_NAME,
  4      C.NULLABLE,
  5      FIND_NULL_COL(c.TABLE_NAME,c.COLUMN_NAME) null_status
  6    FROM all_tab_columns c
  7    WHERE C.OWNER    =USER
  8    AND c.TABLE_NAME = 'EMP'
  9    ORDER BY C.OWNER,
 10      C.TABLE_NAME,
 11      C.COLUMN_ID
 12  /

OWNER      TABLE_NAME           COLUMN_NAME          N NULL_STATUS
---------- -------------------- -------------------- - -----------
SCOTT      EMP                  EMPNO                N           0
SCOTT      EMP                  ENAME                Y           0
SCOTT      EMP                  JOB                  Y           0
SCOTT      EMP                  MGR                  Y           0
SCOTT      EMP                  HIREDATE             Y           0
SCOTT      EMP                  SAL                  Y           0
SCOTT      EMP                  COMM                 Y           1
SCOTT      EMP                  DEPTNO               Y           0

8 rows selected.

SQL>

因此,
NULL\u STATUS
“1”是具有空值的列。

不,这是不可能的。系统必须获取所有列,以便识别其内容是否为空/NULL。因此,您可以使用
*
获取所有行,然后使用任何编程语言筛选获取的结果。首先需要选择所有列,并查找不为null的列。然后,仅使用这些列动态构建一个新查询,并执行该查询。用一种交易安全的方式做这件事可能会很棘手。出于好奇,你能解释一下你为什么要做这样的事情吗?可能你有非常特殊的需求。但就我而言,这听起来更像是一个规范化问题。@horse\u没有名字,为什么不可能呢?请你详细说明一下,因为你的陈述意味着这在甲骨文中是不可能的。这对我来说毫无意义。应该避免只使用链接的答案。也许可以复制一下相关的内容?当然可以,为什么不呢。让我在这里添加内容。在我的时区,现在几乎是午夜。一旦我到达工作地点,我会尽快添加内容。希望这不会违反任何规则。你的电话。只是想让你不被否决。不被否决总比毫无理由地被否决好。我尽我最大的努力去帮助别人,从来没有想过要累积选票和分数。到目前为止,我提供了一个带有小说明的链接(我自己的内容)。每当我回到我的系统,我也会发布内容。