2012-01-12 72 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