sql >> データベース >  >> RDS >> Oracle

PL/SQLを使用して列をループする方法

    私はあなたが欲しいと信じています

    execute immediate 'SELECT count(*) FROM PreparedDocumentFeaturesValues WHERE '|| columnItem.column_name||' IS NULL' into null_row_count;
    

    これが、上記よりもパフォーマンスが高い、より完全な回答です。

    DVLP SQL>create table foo as select * from dba_objects where rownum < 10;
    
    Table created.
    
    DVLP SQL>update foo set status = null;
    
    9 rows updated.
    
    DVLP SQL>
    DVLP SQL>declare
      2    tab_name constant varchar2(32) := 'foo';
      3    not_null number;
      4  begin
      5      for x in (select column_name from all_tab_columns where table_name = upper(tab_name)) loop
      6        dbms_output.put('Checking '||tab_name||'.'||x.column_name);
      7        begin
      8          execute immediate 'select 1 from (select 1 from '||tab_name||
      9            ' where '||x.column_name||' is not null) where rownum = 1' into not_null;
     10          dbms_output.put_line('.');
     11        exception when NO_DATA_FOUND then
     12          dbms_output.put_line('...all null.');
     13        end;
     14      end loop;
     15  end;
     16  /
    Checking foo.OWNER.
    Checking foo.OBJECT_NAME.
    Checking foo.SUBOBJECT_NAME...all null.
    Checking foo.OBJECT_ID.
    Checking foo.DATA_OBJECT_ID.
    Checking foo.OBJECT_TYPE.
    Checking foo.CREATED.
    Checking foo.LAST_DDL_TIME.
    Checking foo.TIMESTAMP.
    Checking foo.STATUS...all null.
    Checking foo.TEMPORARY.
    Checking foo.GENERATED.
    Checking foo.SECONDARY.
    Checking foo.NAMESPACE.
    Checking foo.EDITION_NAME...all null.
    


    1. mysql select and where over some table(非常にトリッキー)

    2. MySQL:トリガーでSIGNALを使用できません

    3. 並列計画の開始方法–パート4

    4. pyodbcはデータベースに接続できません