|
|
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
Добрый день всем. Возникла следующая задача: Есть база на ASA 6.04 В базе есть таблица Код: plaintext 1. 2. 3. 4. 5. 6. В файле формата ASCII file1.txt находятся данные, по структуре в точности совпадающие со структурой этой таблицы (данные выгружены из другой базы с такой же структурой). Нужно залить данные из файла в таблицу, но не все подряд, а с проверкой опред. условий (например, при совпадении ключа пропустить эту одну запись, но залить все остальные). У меня была идея реализовать это путем временной таблицы с такими же полями, как и TabData. Залить данные в эту временную таблицу, ну а дальше уже все просто. Теперь, собственно, проблема: Все упирается в то, каким образом можно с пом. sql-команд создать таблицу со структурой, аналогичной существующей. Писать каждый раз create table (или declare temporary table) со структурой таблицы не есть хорошее решение, т.к. таблиц и файлов много, и структуры у всех разные. Вариант Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. не проходит - выдается ошибка, что #TempTab не найдена. Подскаджите, пожалуйста, как можно создать таблицу с копией заданной структуры или какие-то варианты другого решения поставленной задачи. Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 13:06 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 13:19 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
select * into #TempTab from TabData where indx = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 13:52 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
to Raven A этой синтаксической ошибки в реальном скрипте нет, просто когда я набивала в форуме, то перепутала порядок операторов. Но все равно спасибо :) to Алксандр Спелицин попробовала Ваш вариант. Результат тот же самый. Честно говоря, не понимаю разницы между Вашим и моим вариантами. Ведь таблица-то ни в одном, ни в другом варианте на момент выполнения select into... не существует. Она создается в обоих вариантах динамически. А от ее названия, по-моему, мало что меняется. Или я что-то не понимаю? Условия where indx = 0 и where 1 = 2 , по-моему, тоже равнозначны, т.к. записей с indx = 0 в таблице нет и оба запроса возвращают пустой НД. Ошибка возникает не при выполнении select into... , а при след. обращении к той таблице, куда был сделан select ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 14:51 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
Только что вычитала в Help'e, что в Load table.. нельзя использовать локальные временные таблицы. Так что вопрос теперь звучит так: как можно создать НЕ временную таблицу со структурой, как у другой сущ. таблицы (или какие-либо другие идеи решения описанной задачи). Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 15:11 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
Когда-то у меня была похожая задачка... Не буду утверждать что мое решение самое простое... но оно работает :) 1) Все целевые таблицы (на данный момент пустые) выгружаются в формат dBaseIII 2) Запускается сам dBaseIII (впрочем можно использовать и клиппер и фокспро :), и средствами dBaseIII данные из ascii файла затягиваются в dbf'ы use data1.dbf append from data1.txt delimited "," 3) опять же средствами dBaseIII чистим данные с проверкой условия delete for idx_fld<2 .and. idx_fld>10 pack (Впрочем, можно эту операцию и пропустить и делать фильтрацию уже позже, средствами sql) 4) Загружаем в ASA базу уже отфильтрованные данные из data1.dbf а потом загружать dbf'ки во временные таблицы через команду isql - input. она в отличие от load умеет загружать данные во временные таблицы. А структуру этой временной таблицы она возьмет из заголовка dbf файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 18:07 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
Спасибо за идею. Если честно, то не совсем понятен первый пункт реализации: каким образом выгружается структура таблиц в формат Dbase? Unload Table в ASA 6 поддерживает только выгрузку в ASCII. А Вы как выгружали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 18:35 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
Ну выгружать данные можно и при помощи OUTPUT TO см help :-)) SELECT * FROM employee ; OUTPUT TO employee.txt FORMAT DBASEIII ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 18:43 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
Это я конечно по поводу данных... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 18:46 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
А по поводу твоего вопроса, создаешь хранимую, в которую передаешь имя таблицы, владельца, имя как хочешь чтобы называлась, ищещь в системных таблицах sys.systable, sys.syscolumn,sys.sysdomain и т.п.(данные по таблицы), создаешь строку на основании полученных данных типа set sql='create table tt(dd integer)'; execute immediate sql; ну а дальше простой инсерт... типа set sql='insert into tt from TabData where indx = 0'; execute immediate sql; Сама понимаешь это только пример... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 18:58 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
AkniUnload Table в ASA 6 поддерживает только выгрузку в ASCII. А Вы как выгружали? Вся работа делается черз dbisql и его команды INPUT/OUTPUT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2004, 21:53 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
Есть такая штука - ErWin называется. Натравливаешь ее на БД (в том числе и на DBF) делаешь реинженеринг - получаешь описание таблиц. Можешь там кое что поправить. А потом сгенерить скрипт на создание таблиц в другой БД. Или Borland DataBase Decstop (из Delphi или С билдера) позволяет копировать таблицы из одной БД (любой из списка ODBC) в другую (любую из списка ODBC). Причем при копировании структуру создает сам (иногда кривую) на основе исходной таблицы. Проблемы возникали, только если таблицы содержали экзотические типы данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 05:26 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
to DenisVK Output... format dBaseIII это конечно хорошо, и help я тоже иногда читаю, особенно перед тем, как свои проблемы на другую голову сваливать :) Но воспользоваться Output-ом я в данном случае не могу, т.к. данные выгружаются из нескольких таблиц в несколько файлов в одной хранимой процедуре по куче условий, а в батчах, процедурах и ф-циях использование этой команды, увы, не разрешается. А по поводу динамического создания таблиц из системных - идея хорошая, может в жизни пригодиться. Опробую. to golsa он копирует таблицы вместе с данными или можно только структуру копировать и таблице в другой базе другое имя дать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 10:16 |
|
||
|
ASA6. Заполнение данными из внешнего файла
|
|||
|---|---|---|---|
|
#18+
Воспользовавшись советом DenisVK, получилась такая процедура, которая создает новую пустую таблицу со структурой заданной (может, еще кому-то пригодится): Код: 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. Некоторые моменты здесь не учтены (владелец таблицы, Check-constraints), т.к. для моей задачи это не актуально. Если есть какие-то замечания по оптимизации этого кода, буду признательна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 13:58 |
|
||
|
|

start [/forum/topic.php?fid=55&fpage=126&tid=2014577]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 380ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...