在ORACLE的select语句中获取字段的数据类型

Bus*_*cka 18 sql oracle types function

我可以使用select语句获取我选择的每列的数据类型而不是值吗?

例如:

SELECT a.name, a.surname, b.ordernum 
FROM customer a
JOIN orders b
ON a.id = b.id
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的

name    | NVARCHAR(100)
surname | NVARCHAR(100)
ordernum| INTEGER
Run Code Online (Sandbox Code Playgroud)

或者它可以在这样的行中,它并不重要:

name           |   surname     |  ordernum
NVARCHAR(100)  | NVARCHAR(100) |   INTEGER
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 14

通过使用,我发现了一种非常直观的方法 DUMP()

SELECT DUMP(A.NAME), 
       DUMP(A.surname), 
       DUMP(B.ordernum) 
FROM   customer A 
       JOIN orders B 
         ON A.id = B.id
Run Code Online (Sandbox Code Playgroud)

它将返回如下内容:

'Typ=1 Len=2: 0,48' 对于每一列.

Type=1手段VARCHAR2/NVARCHAR2
Type=2是指NUMBER/FLOAT
Type=12装置DATE

您可以参考这个oracle doc获取信息数据类型代码
或者这个用于简单映射Oracle Type Code Mappings


abh*_*bhi 13

您可以all_tab_columns在数据库中查询视图.

SELECT  table_name, column_name, data_type, data_length FROM all_tab_columns where table_name = 'CUSTOMER'
Run Code Online (Sandbox Code Playgroud)

  • 是的,但这对于这样的查询不起作用:`SELECT a.name,a.surname,TO_CHAR(b.ordernum)as ordernum_char`.为此,您必须使用包DBMS_SQL并使用显式游标. (7认同)
  • @WernfriedDomscheit一个具体的例子是受欢迎的. (2认同)

Fer*_*o M 5

我通常创建一个视图并使用以下DESC命令:

CREATE VIEW tmp_view AS 
SELECT 
      a.name
    , a.surname
    , b.ordernum 
FROM customer a
  JOIN orders b
    ON a.id = b.id
Run Code Online (Sandbox Code Playgroud)

然后,该DESC命令将显示每个字段的类型。

DESC tmp_view