Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / Как в Informix узнать тип поля? / 9 сообщений из 9, страница 1 из 1
10.01.2005, 15:52
    #32857674
win-kim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в Informix узнать тип поля?
Помогите пожалуйста!
Мне необходимо узнать типы полей при выборке. Я знаю что в таблице syscolumns в числовом поле coltype, Informix хранит тип поля, но как узнать чему оно соответствует я не имею понятия.
Эксперементальным путем добился примерных результатов, но сталкнулся с проблемой при типе char. Какую бы длину не задавал все равно значение равно 0.

coltype name

7 DATE
10 DATETIME YEAR TO SECOND
266 DATETIME YEAR TO SECOND not null
11 BYTE in
12 TEXT in
41 boolean
0 CHAR(1)
13 VARCHAR(255)
15 NCHAR(1)
16 NVARCHAR(128)
40 lvarchar
256 CHAR(1) not null
269 VARCHAR(255) not null
1 SMALLINT
2 INT
3 FLOAT
4 SMALLFLOAT
5 DECIMAL(32)
6 SERIAL
17 INT8
258 INT not null
261 DECIMAL(32) not null
273 INT8 not null
274 SERIAL8 not null

Help me

best regards,
win-kim
...
Рейтинг: 0 / 0
10.01.2005, 17:14
    #32857820
vybegallo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в Informix узнать тип поля?
RTFM !
Informix Guide to SQL
Reference


coltype SMALLINT Code for column data type:
0 = CHAR 14 = INTERVAL
1 = SMALLINT 15 = NCHAR
2 = INTEGER 16 = NVARCHAR
3 = FLOAT 17 = INT8
4 = SMALLFLOAT 18 = SERIAL8 *
5 = DECIMAL 19 = SET
6 = SERIAL * 20 = MULTISET
7 = DATE 21 = LIST
8 = MONEY 22 = rOW (unnamed)
9 = NULL 23 = COLLECTION
10 = DATETIME 24 = ROWREF
11 = BYTE 40 = Variable-length
opaque type
12 = TEXT 41 = Fixed-length
opaque type
13 = VARCHAR 4118 = Named row
type
...
Рейтинг: 0 / 0
10.01.2005, 17:15
    #32857829
vybegallo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в Informix узнать тип поля?
Table syscolumns, field
collength SMALLINT Column length (in bytes)
...
Рейтинг: 0 / 0
11.01.2005, 09:21
    #32858349
win-kim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в Informix узнать тип поля?
Спасибо за помощь, я вчера написал уже функцию до ответа на форуме.
Только такой вопрос:
как вычислить размер типа decimal?

best regards,
win-kim
...
Рейтинг: 0 / 0
11.01.2005, 10:01
    #32858403
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в Informix узнать тип поля?
win-kimПомогите пожалуйста!
Мне необходимо узнать типы полей при выборке. Я знаю что в таблице syscolumns в числовом поле coltype, Informix хранит тип поля, но как узнать чему оно соответствует я не имею понятия.
Эксперементальным путем добился примерных результатов, но сталкнулся с проблемой при типе char. Какую бы длину не задавал все равно значение равно 0.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
select colname,
             case mod(coltype,256)
                WHEN  0 THEN "CHAR"
                WHEN  1 THEN "SMALLINT"
                WHEN  2 THEN "INTEGER"
                WHEN  3 THEN "FLOAT"
                WHEN  4 THEN "SMALLFLOAT"
                WHEN  5 THEN "DECIMAL"
                WHEN  6 THEN "SERIAL"
                WHEN  7 THEN "DATE"
                WHEN  8 THEN "MONEY"
                WHEN  9 THEN "NULL"
                WHEN 10 THEN "DATETIME"
                WHEN 11 THEN "BYTE"
                WHEN 12 THEN "TEXT"
                WHEN 13 THEN "VARCHAR"
                WHEN 14 THEN "INTERVAL"
                WHEN 15 THEN "NCHAR"
                WHEN 16 THEN "NVCHAR"
                WHEN 17 THEN "INT8"
                WHEN 18 THEN "SERIAL8"
                WHEN 19 THEN "SET"
                WHEN 20 THEN "MULTISET"
                WHEN 21 THEN "LIST"
                WHEN 22 THEN "rOW (unnamed)"
                WHEN 23 THEN "COLLECTION"
                WHEN 24 THEN "ROWREF"
                WHEN 25 THEN "rOW (unnamed)"
                WHEN 40 THEN "Variable-length opaque type"
                WHEN 41 THEN "Fixed-length opaque type"
                WHEN 4118 THEN "Named row type"
                ELSE "UNKNOWN"
              END coltype,
              CASE
                WHEN mod(coltype,256) in (5,8) THEN trunc(collength/256)||","||mod(collength,256)
                WHEN mod(coltype,256) in (10,14) THEN
                   CASE trunc(mod(collength,256)/16)
                        WHEN  0 THEN "YEAR"
                        WHEN  2 THEN "MONTH"
                        WHEN  4 THEN "DAY"
                        WHEN  6 THEN "HOUR"
                        WHEN  8 THEN "MINUTE"
                        WHEN 10 THEN "SECOND"
                        WHEN 11 THEN "FRACTION(1)"
                        WHEN 12 THEN "FRACTION(2)"
                        WHEN 13 THEN "FRACTION(3)"
                        WHEN 14 THEN "FRACTION(4)"
                        WHEN 15 THEN "FRACTION(5)"
                     END ||"("||trunc(collength/256)+trunc(mod(collength,256)/16)-mod(collength,16)||") : "||
                       CASE mod(collength,16)
                        WHEN  0 THEN "YEAR"
                        WHEN  2 THEN "MONTH"
                        WHEN  4 THEN "DAY"
                        WHEN  6 THEN "HOUR"
                        WHEN  8 THEN "MINUTE"
                        WHEN 10 THEN "SECOND"
                        WHEN 11 THEN "FRACTION(1)"
                        WHEN 12 THEN "FRACTION(2)"
                        WHEN 13 THEN "FRACTION(3)"
                        WHEN 14 THEN "FRACTION(4)"
                        WHEN 15 THEN "FRACTION(5)"
                     END
                 ELSE ""||collength
          END collength,
              CASE
                    WHEN coltype>255 THEN "Нет"
                    ELSE "Да" END nnull,
                    colno
                                from syscolumns
                                where tabid=:tabid
order by colno
...
Рейтинг: 0 / 0
17.01.2005, 17:02
    #32868460
win-kim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в Informix узнать тип поля?
Журавлев Денис,
Спасиб большое

best regards,
win-kim
...
Рейтинг: 0 / 0
20.01.2005, 13:35
    #32874630
Alevtin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в Informix узнать тип поля?
Красиво. Сам что-то подобное делал, но намного кривее. А теперь смотрю на это и просто руки чешутся подправить старую свою программку. Хотя работает она в принципе правильно, но так намного красивее.
...
Рейтинг: 0 / 0
20.01.2005, 13:37
    #32874649
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в Informix узнать тип поля?
Там пара неточностей (year(4) to second вместо year to second), я его давно не использую.

-----------------------------------------------------------
Хочу есть. myinformix
...
Рейтинг: 0 / 0
20.01.2005, 14:23
    #32874808
Alevtin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в Informix узнать тип поля?
Ясно, но для моих целей подойдет и существующий вариант. Я его всеравно буду переделывать под ESQL/C, у меня просто, глядя на этот запрос, появилась идея, как сделать красиво у себя. :-)
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Как в Informix узнать тип поля? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]