web-dev-qa-db-ja.com

ORACLEのselectステートメントでフィールドのデータ型を取得します

Selectステートメントを使用して、値の代わりに選択した各列のデータ型を取得できますか?

例えば:

SELECT a.name, a.surname, b.ordernum 
FROM customer a
JOIN orders b
ON a.id = b.id

結果は次のようになります

name    | NVARCHAR(100)
surname | NVARCHAR(100)
ordernum| INTEGER

または、このように列に並んでも構いませんが、重要ではありません。

name           |   surname     |  ordernum
NVARCHAR(100)  | NVARCHAR(100) |   INTEGER

ありがとう

18
Bushwacka

データベースのall_tab_columnsビューをクエリできます。

SELECT  table_name, column_name, data_type, data_length FROM all_tab_columns where table_name = 'CUSTOMER'
13
abhi

DUMP()を使用して、これを行うにはあまり直感的ではない方法を見つけました

SELECT DUMP(A.NAME), 
       DUMP(A.surname), 
       DUMP(B.ordernum) 
FROM   customer A 
       JOIN orders B 
         ON A.id = B.id

次のようなものが返されます。

'Typ=1 Len=2: 0,48'各列。

Type=1 手段 VARCHAR2/NVARCHAR2
Type=2 手段 NUMBER/FLOAT
Type=12DATEなどを意味します。

詳細については、このOracleドキュメントを参照してください Datatype Code
または単純なマッピングの場合 Oracle Type Code Mappings

13
Maxwell Cheng

通常、ビューを作成し、DESCコマンドを使用します。

CREATE VIEW tmp_view AS 
SELECT 
      a.name
    , a.surname
    , b.ordernum 
FROM customer a
  JOIN orders b
    ON a.id = b.id

次に、DESCコマンドは各フィールドのタイプを表示します。

DESC tmp_view

4
Fernando M

私も同じ状況になりました。回避策として、view(特権がある場合)を作成して説明し、後で削除しました。 :)

3
Praveen

Oracleでビューを作成する権限がない場合は、MS Accessを使用するためにビューを「ハック」する:-(

MS Accessで、SQLを使用してパススルークエリを作成します(ただし、1つのレコードを選択するためにwhere句を追加します)。これを実行すると、1つのレコードを持つテーブルが作成され、すべてのデータ型がOracleと「一致」するはずです。すなわち、パススルー->選択-> MakeTable->テーブル

他にももっと良い方法があると確信していますが、ツールと権限が限られている場合はこれが機能します。

1
Swamp

また、Toad for Oracleを使用している場合は、ステートメントを強調表示して、 CTRL + F9 列とそのデータ型の素晴らしい表示が得られます。

0
Florin Ghita