-- 查詢表結構的所有屬性
SELECT t.*
FROM User_Tab_Cols t, User_Col_Comments t1
WHERE t.TABLE_NAME = t1.TABLE_NAME
AND t.COLUMN_NAME = t1.COLUMN_NAME
AND t.TABLE_NAME='TABLE01' -- 查詢的表名
ORDER BY t.COLUMN_ID ASC;
-- 查詢表的列字段(NUMBER類型)的長度和精度
SELECT t.TABLE_NAME, t.COLUMN_NAME, t.DATA_PRECISION, t.DATA_SCALE
FROM User_Tab_Cols t, User_Col_Comments t1
WHERE t.TABLE_NAME = t1.TABLE_NAME
AND t.COLUMN_NAME = t1.COLUMN_NAME
AND (t.DATA_TYPE = 'NUMBER')
AND t.TABLE_NAME='TABLE01' -- 查詢的表名
ORDER BY t.COLUMN_ID ASC;
-- 查詢表的列字段:NUMBER類型 & 精度爲0或精度爲空的列字段
SELECT t.*
FROM User_Tab_Cols t, User_Col_Comments t1
WHERE t.table_name = t1.table_name
AND t.column_name = t1.column_name
AND (t.DATA_SCALE is NULL OR t.DATA_SCALE=0)
AND (t.DATA_TYPE = 'NUMBER')
AND t.TABLE_NAME = 'TABLE01' -- 查詢的表名
ORDER BY t.COLUMN_ID ASC;
-- 查詢Oracle表的字符串字段的長度和單位
SELECT TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH, -- Length of the column (in bytes)
CHAR_COL_DECL_LENGTH, -- Declaration length of character type column
CHAR_LENGTH, -- Displays the length of the column in characters of CHAR/VARCHAR2/NCHAR/NVARCHAR
CHAR_USED -- B|C. The column uses BYTE|CHAR length semantics. NULL indicates the datatype is not any of the following: CHAR/VARCHAR2/NCHAR/NVARCHAR.
FROM USER_TAB_COLS
-- FROM ALL_TAB_COLUMNS 也可以查詢ALL_TAB_COLUMNS表
WHERE TABLE_NAME='TEST_BYTE_CHAR_01';
關於列字段的詳細信息,可以參考:
USER_TAB_COLUMNS:https://ss64.com/orad/USER_TAB_COLUMNS.html
ALL_TAB_COLUMNS:https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_2094.htm
例如:
CREATE TABLE "TEST_BYTE_CHAR_01" (
"ID" NUMBER NOT NULL ,
"COL_STR1_BYTE" VARCHAR2(4 BYTE) NULL ,
"COL_STR2_CHAR" VARCHAR2(4 CHAR) NULL ,
"COL_STR3_NULL" VARCHAR2(4) NULL -- 不指定單位B|C,數據庫默認爲BYTE
);
TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH CHAR_COL_DECL_LENGTH CHAR_LENGTH CHAR_USED
TEST_BYTE_CHAR_01 ID NUMBER 22 NULL 0 NULL
TEST_BYTE_CHAR_01 COL_STR1_BYTE VARCHAR2 4 4 4 B
TEST_BYTE_CHAR_01 COL_STR2_CHAR VARCHAR2 16 16 4 C
TEST_BYTE_CHAR_01 COL_STR3_NULL VARCHAR2 4 4 4 B