Sql 选择除null或NVL all null以外的所有列
是否有任何方法可以选择记录中字段不为null的所有列,或将null字段NVL到“”? 我在甲骨文公司工作 像这样的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值的列,该函数将返
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没有名字,为什么不可能呢?请你详细说明一下,因为你的陈述意味着这在甲骨文中是不可能的。这对我来说毫无意义。应该避免只使用链接的答案。也许可以复制一下相关的内容?当然可以,为什么不呢。让我在这里添加内容。在我的时区,现在几乎是午夜。一旦我到达工作地点,我会尽快添加内容。希望这不会违反任何规则。你的电话。只是想让你不被否决。不被否决总比毫无理由地被否决好。我尽我最大的努力去帮助别人,从来没有想过要累积选票和分数。到目前为止,我提供了一个带有小说明的链接(我自己的内容)。每当我回到我的系统,我也会发布内容。