2012-01-12 89 views
5

的MySQL版本在Oracle中,如果我需要聲明與同類型的另一列的東西,我可以簡單地使用%type有甲骨文%TYPE

Create table foo(
    copiedType OTHER_TABLE.COLUMN_NAME%TYPE 
    /* yada yada yada... */ 

是否有MySQL的等效運營商?

+0

我不認爲這是可能的在MySQL中。 – 2012-01-12 18:32:21

+0

@EmmanuelN是的......我不這麼認爲。你知道,Oracle並不完美,但它有一些MySQL缺乏的細節。 (也就是說,PostGreSQL是兩全其美的,但我愛上了那個數據庫) – cwallenpoole 2012-01-13 14:26:32

回答

2

嗯,簡單的答案,因爲它原來是「不」,而它可以假如你願意創建一個存儲函數(或者使用另一種語言),並通過你自己的定製的解析引擎創建你的表,它就是不值得的。花蓮血清...

0

除非我失去了一些東西到Oracle %type在MySQL中唯一的選擇就是以下,

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name'; 
+0

我很確定你不能在CREATE TABLE語句中使用它。 – Mchl 2012-01-13 08:40:54

+0

@Dennis我知道如何獲得列類型,但因爲我不想考慮模式完整性(思考是危險的),所以我寧願在變量聲明或列定義中使用某些東西。 – cwallenpoole 2012-01-13 14:08:46

+0

@cwallenpoole可以理解。理論上你應該能夠創建一個將上述輸出存儲到一個變量中的過程,然後使用該變量創建你正在嘗試構建的表。我還沒有嘗試過,所以無法確定它會起作用。 – 2012-01-13 17:26:15

-1

你可以這樣

SET @field_type = (select DATA_TYPE from INFORMATION_SCHEMA.columns 
        where TABLE_NAME='users' and COLUMN_NAME='name'); 

在程序使用,然後你可以很容易地使用@field_type變量。

+0

正如在我的回答中指出的那樣,不能根據另一個變量的類型輸入一個變量作爲CREATE TABLE語法的一部分。在變量中訪問它幾乎沒有用處 – cwallenpoole 2017-07-10 08:42:18