Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Число заполненных полей  [new]
nlop
Member

Откуда:
Сообщений: 14
Как можно подсчитать число заполненных полей для строки?
18 янв 07, 15:40    [3661644]     Ответить | Цитировать Сообщить модератору
 Re: Число заполненных полей  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116210
nlop
Как можно подсчитать число заполненных полей для строки?

С учетом того, что имена полей известны ?
18 янв 07, 15:43    [3661668]     Ответить | Цитировать Сообщить модератору
 Re: Число заполненных полей  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
declare
  a_owner varchar2(30) := 'SCOTT';
  a_tname varchar2(30) := 'EMP';
  type vc250 is table of varchar2(250) index by binary_integer;
  t1 vc250;
  t2 vc250;
  n binary_integer := 0;
  procedure pl (p in varchar2) is
    a_offs number := 100;
  begin
    for i in 1..ceil(length(p)/a_offs) loop
      if i = 1 then
        dbms_output.put_line(substr(p,(i-1)*a_offs,a_offs));
      else
        dbms_output.put_line(i||') '||substr(p,(i-1)*a_offs,a_offs));
      end if;
    end loop;
  end;
begin
  for c1 in (select table_name TNAME
     from all_tables
    where owner = a_owner
      and table_name = a_tname
  ) loop
    t1(1) := 'select ''Not Null'' '||c1.tname||' ';
    t2(1) := ' union select ''Null'' ';
    n := 1;
    for c2 in (select column_name CNAME
      from all_tab_columns
     where owner = a_owner
       and table_name = c1.tname
  order by column_id
    ) loop
      n := n + 1;
      t1(n) := ',sum(decode('||c2.cname||',null,0,1)) '||c2.cname;
      t2(n) := ',sum(decode('||c2.cname||',null,1,0)) '||c2.cname;
    end loop;
    n := n + 1;
    t1(n) := ' from '||a_owner||'.'||c1.tname;
    t2(n) := ' from '||a_owner||'.'||c1.tname||';';
    pl('--->. '||c1.tname);
    for i in 1..n loop
      pl(t1(i));
    end loop;
    for i in 1..n loop
      pl(t2(i));
    end loop;
  end loop;
end;
18 янв 07, 15:44    [3661672]     Ответить | Цитировать Сообщить модератору
 Re: Число заполненных полей  [new]
nlop
Member

Откуда:
Сообщений: 14
Да имена полей известны.
18 янв 07, 15:49    [3661709]     Ответить | Цитировать Сообщить модератору
 Re: Число заполненных полей  [new]
Elic
Member

Откуда:
Сообщений: 29987
STFF ListNullColumns
18 янв 07, 15:49    [3661712]     Ответить | Цитировать Сообщить модератору
 Re: Число заполненных полей  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116210
nlop
Да имена полей известны.

Ну тогда

SQL> select empno, decode(empno,null,0,1) + decode(ename,null,0,1) + decode(sal,to_number(null),0,1) +
  2         decode(comm,to_number(null),0,1) -- + ...
  3  from scott.emp
  4  /

EMPNO DECODE(EMPNO,NULL,0,1)+DECODE(
----- ------------------------------
 7369                              3
 7499                              4
 7521                              4
 7566                              3
 7654                              4
 7698                              3
 7782                              3
 7788                              3
 7839                              3
 7844                              4
 7876                              3
 7900                              3
 7902                              3
 7934                              3
  222                              3

15 rows selected

SQL> 
18 янв 07, 15:54    [3661751]     Ответить | Цитировать Сообщить модератору
 Re: Число заполненных полей  [new]
nlop
Member

Откуда:
Сообщений: 14
А ларчик просто открывался :)
Спасибо
18 янв 07, 15:55    [3661763]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить