19.02.2007, 17:14 | #1 |
Участник
|
sqldictionary - маппинг fieldtype в тип колонки Oracle, default
Глядя в sqldictionary вижу колонки с fieldtype=2, которые мапятся в физические колонки с типами number и number(32,16) (для Oracle). Для СКЛ - всё маппится в decimal(28,12).
Куда еще кроме sqldictionary надо смотреть чтобы вытащить precision, scale? Аналогичный вопрос - для default. ссылка на описание словаря метаданных - приветствуется. Dynamics Ax 4.0 SP1 |
|
19.02.2007, 18:42 | #2 |
Moderator
|
может, по типам данных поможет такая картинка?
|
|
19.02.2007, 21:06 | #3 |
Участник
|
Спасибо, но это немного не то :-(
Меня интересует вопрос, исходя из каких соображений для fieldtype=2 выбирается тот или иной precision и scale. Ну, и default, конечно. Просто в демо-базе я увидел - не всегда есть однозначное соответствие. |
|
20.02.2007, 09:23 | #4 |
Moderator
|
А можно примеры? Насколько мне помнится, различие внутри типа бывает только для string (fieldtype=0) - т.е. бывает разная длина строки. Для fieldtype=2 (т.е. real) физически поля в базе данных будут именно такими, как Вы указываете. Т.е. в Oracle все real-поля будут только number(32,16) и не будет никаких других,например, number(24,8). Другое дело, что внутри самого приложения Axapta существует громадная иерархия расширенных типов данных (EDT), определенных в словаре данных. В этой иерархии конкретные real-типы могут различаться такими характеристиками, как число знаков после десятичной запятой, кол-во отображаемых знаков и т.п. (При этом в базе Oracle они все будут храниться в number(32,16) ). Может быть, Вы об этом? В любом случае помимо таблицы SqlDictionary надо заглянуть в репозитарий прикладных объектов (AOT) в узел "Data Dictionary".
|
|
20.02.2007, 12:19 | #5 |
Участник
|
я загрузил DemoData EN-US 401 в Oracle и в MS SQL.после чего выборкой типа
Код: select distinct sd.fieldtype,tc.DATA_TYPE,tc.DATA_PRECISION,tc.DATA_SCALE from administrator.sqldictionary sd join administrator.sqldictionary so on sd.tableid=so.tableid and sd.fieldid<> 0 and so.fieldid = 0 join sys.all_tab_columns tc on sd.name=tc.COLUMN_NAME and tc.TABLE_NAME = so.name Код: FIELDTYPE DATA_TYPE DATA_PRECISION DATA_SCALE 0 NVARCHAR2 1 NUMBER 10 0 2 NUMBER 32 16 2 NUMBER 3 DATE 4 NUMBER 10 0 7 BLOB 8 NCLOB Последний раз редактировалось locky_sql_ru; 20.02.2007 в 12:23. |
|
20.02.2007, 12:44 | #6 |
Участник
|
Цитата:
PS. Прикол: в этом классе еще есть метод insertSystemVariablesSqlAnywhere() |
|
20.02.2007, 12:52 | #7 |
Moderator
|
2 locky_sql_ru : cлегка модифицировал Ваш запрос - добавил Count:
Код: SELECT sd.fieldtype,tc.data_type,tc.data_precision,tc.data_scale, COUNT(*) FROM sqldictionary sd JOIN sqldictionary so ON sd.tableid=so.tableid AND sd.fieldid<> 0 AND so.fieldid = 0 JOIN sys.all_tab_columns tc ON sd.NAME=tc.column_name AND tc.table_name = so.NAME GROUP BY sd.fieldtype,tc.data_type,tc.data_precision,tc.data_scale Код: FIELDTYPE DATA_TYPE DATA_PRECISION DATA_SCALE COUNT(*) 0 VARCHAR2 10 468 1 NUMBER 6 1 NUMBER 10 0 3 654 2 NUMBER 33 2 NUMBER 32 16 1 897 3 DATE 1 320 4 NUMBER 10 0 3 347 7 BLOB 86 8 CLOB 88 А в остальном всё хорошо: 0 - String 1 - Integer 2 - Real 3 - Date 4 - Enum (по сути тот же integer) 7 - Container 8 - VarString |
|
20.02.2007, 14:24 | #8 |
Участник
|
у меня number расходится например в 'LEDGERBALANCES','ADDRESS'
В 'ADDRESS' - number(32,16), в 'LEDGERBALANCES' - просто number Код: select so.name,sd.name,sd.fieldtype,tc.DATA_TYPE,tc.DATA_PRECISION,tc.DATA_SCALE ,sd.* from administrator.sqldictionary sd join administrator.sqldictionary so on sd.tableid=so.tableid and sd.fieldid <> 0 and so.fieldid = 0 join sys.all_tab_columns tc on sd.name=tc.COLUMN_NAME and tc.TABLE_NAME = so.name where tc.DATA_TYPE = 'NUMBER' and sd.fieldtype = 2 and sd.name in ('CREDITMST','LINENUM') and so.name in ('LEDGERBALANCES','ADDRESS') Код: NAME NAME FIELDTYPE DATA_TYPE DATA_PRECISION DATA_SCALE TABLEID FIELDID ARRAY NAME SQLNAME FIELDTYPE STRSIZE SHADOW RIGHTJUSTIFY NULLABLE FLAGS RECVERSION RECID ADDRESS LINENUM 2 NUMBER 32 16 1 3 1 LINENUM LINENUM 2 0 0 0 0 0 1 5637145421 LEDGERBALANCES CREDITMST 2 NUMBER 1356 9 1 CREDITMST CREDITMST 2 0 0 0 0 0 1 5637173370 |
|
20.02.2007, 14:49 | #9 |
Злыдни
|
А посмотрите ExtendedDataType у этих полей. Например, LineNum на трешке основан на RealBase, но у него количество знаков после запятой переназначено. Может в этом дело?
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
20.02.2007, 15:36 | #10 |
Moderator
|
2 locky_sql_ru: Вам, наверное, будет интересно вот это: Axapta Doc Generator. А оттуда ссылка в качестве примера ведет сюда: http://schunk.dk/DocWeb/index.html
|
|
Теги |
ax4.0, oracle, sqldictionary |
|
|