1

テーブルから 50 個のフィールドを選択する必要があります。しかし、20 番目のフィールドは 100 で除算する必要があります。そうでない場合は、単純に select * from table と書くことができます。この場合、すべての列を書き込まずに選択するにはどうすればよいでしょうか。

すべての列を明示的に言及することをお勧めしますが、短い分析のためにデータをすばやく表示したい場合は、 select *(1-19 fields) 、 20th field/100 、 *(21- 50 フィールド) テーブルから。

これはオラクルで可能ですか?

4

5 に答える 5

2

SQL の開発に使用できる最高のツールの 1 つは、列編集モードを備えた適切なテキスト エディターです。これを提供する SQL Developer の拡張要求がありますが、当面は Notepad++ が適切な選択です。

このようなタスクでは、テーブルまたはビューの DESC によって列名を取得し、列ベースのエディターを使用して整列したコンマを追加し、必要な 1 つの列を変更できます。

たとえば、ほとんどの列にカウントを適用して列名を追加する必要がある場合にも便利です。

以下の例では、約 45 秒かかりました。

select
          OWNER                                                        ,
          count(TABLE_NAME               ) c_TABLE_NAME                ,
          count(TABLESPACE_NAME          ) c_TABLESPACE_NAME           ,
          count(CLUSTER_NAME             ) c_CLUSTER_NAME              ,
          count(IOT_NAME                 ) c_IOT_NAME                  ,
          count(STATUS                   ) c_STATUS                    ,
          count(PCT_FREE                 ) c_PCT_FREE                  ,
          count(PCT_USED                 ) c_PCT_USED                  ,
          count(INI_TRANS                ) c_INI_TRANS                 ,
          count(MAX_TRANS                ) c_MAX_TRANS                 ,
          count(INITIAL_EXTENT           ) c_INITIAL_EXTENT            ,
          count(NEXT_EXTENT              ) c_NEXT_EXTENT               ,
          count(MIN_EXTENTS              ) c_MIN_EXTENTS               ,
          count(MAX_EXTENTS              ) c_MAX_EXTENTS               ,
          count(PCT_INCREASE             ) c_PCT_INCREASE              ,
          count(FREELISTS                ) c_FREELISTS                 ,
          count(FREELIST_GROUPS          ) c_FREELIST_GROUPS           ,
          count(LOGGING                  ) c_LOGGING                   ,
          count(BACKED_UP                ) c_BACKED_UP                 ,
          count(NUM_ROWS                 ) c_NUM_ROWS                  ,
          count(BLOCKS                   ) c_BLOCKS                    ,
          count(EMPTY_BLOCKS             ) c_EMPTY_BLOCKS              ,
          count(AVG_SPACE                ) c_AVG_SPACE                 ,
          count(CHAIN_CNT                ) c_CHAIN_CNT                 ,
          count(AVG_ROW_LEN              ) c_AVG_ROW_LEN               ,
          count(AVG_SPACE_FREELIST_BLOCKS) c_AVG_SPACE_FREELIST_BLOCKS ,
          count(NUM_FREELIST_BLOCKS      ) c_NUM_FREELIST_BLOCKS       ,
          count(DEGREE                   ) c_DEGREE                    ,
          count(INSTANCES                ) c_INSTANCES                 ,
          count(CACHE                    ) c_CACHE                     ,
          count(TABLE_LOCK               ) c_TABLE_LOCK                ,
          count(SAMPLE_SIZE              ) c_SAMPLE_SIZE               ,
          count(LAST_ANALYZED            ) c_LAST_ANALYZED             ,
          count(PARTITIONED              ) c_PARTITIONED               ,
          count(IOT_TYPE                 ) c_IOT_TYPE                  ,
          count(TEMPORARY                ) c_TEMPORARY                 ,
          count(SECONDARY                ) c_SECONDARY                 ,
          count(NESTED                   ) c_NESTED                    ,
          count(BUFFER_POOL              ) c_BUFFER_POOL               ,
          count(ROW_MOVEMENT             ) c_ROW_MOVEMENT              ,
          count(GLOBAL_STATS             ) c_GLOBAL_STATS              ,
          count(USER_STATS               ) c_USER_STATS                ,
          count(DURATION                 ) c_DURATION                  ,
          count(SKIP_CORRUPT             ) c_SKIP_CORRUPT              ,
          count(MONITORING               ) c_MONITORING                ,
          count(CLUSTER_OWNER            ) c_CLUSTER_OWNER             ,
          count(DEPENDENCIES             ) c_DEPENDENCIES              ,
          count(COMPRESSION              ) c_COMPRESSION               ,
          count(DROPPED                  ) c_DROPPED
from     dba_tables
group by owner
于 2012-05-24T08:01:32.270 に答える
1

確かに、列名を明示的にリストしたい本番コードではこれを行いたくないでしょう。また、計算を関数に入れるか、クエリ全体をビューに入れることもできます。ただし、簡単な分析を行うだけの場合は、次のようなものを使用して、計算された列を列リストの最初(または最後)に簡単に配置できます。

SELECT column20/100 computed_col20, a.*
  FROM table_name a
于 2012-05-27T07:04:12.720 に答える
1

データディクショナリはあなたの友達です:

select column_name || ','
from all_tab_columns
where table_name = 'SOME_TABLE'
and owner = 'SOME_OWNER'
order by column_id;

これをIDEで実行し、結果をコピーしてコードに貼り付けます。もちろん、出力のニーズに合わせて必要に応じて変更してください。

怠惰にならないでください。select*と言いたくなることは知っていますが、列を明示的に指定する方がはるかに優れています。上記のコードを使用すると、各列を手動で書き出すよりもはるかに簡単になります。

于 2012-05-24T10:42:01.473 に答える
1

いいえ、すべての列を入力するのが面倒な場合は、SQLDEVELOPER などのツールを使用して、テーブルを編集領域にドラッグし、完全な選択ステートメントを提供します。

また、列名を明示的に記載することをお勧めします。何らかの理由でテーブルが変更され、列が削除された場合、クエリは機能しなくなります。

于 2012-05-24T07:11:59.813 に答える
0

すべての列の名前を書くだけで、20番目の列に「column/20」と書くことができます。大変な作業のように思えるかもしれませんが、他の方法は見当たりません。

于 2012-05-24T07:10:08.753 に答える