Форум: "Начинающим";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
ВнизКак программно можно проверть, существуеть ли таблиц в Оракле Найти похожие ветки
← →
Новый (2007-12-02 09:37) [0]Как программно можно проверть, существуеть ли конкретный таблицы в базе Оракле.
← →
palva © (2007-12-02 11:18) [1]Соединиться через ADO, получить список таблиц и проверить. Но в каждой СУБД существуют свои собственные способы. Наверняка и в Oracle есть какая-нибудь встроенная процедура.
← →
Sergey Masloff (2007-12-02 11:28) [2]palva © (02.12.07 11:18) [1]
А таблиц этих 28000 к примеру
← →
Sergey Masloff (2007-12-02 11:35) [3]А вообще это как и многое другое можно узнать в словаре. Справка по ораклу, ключевые слова data dictionary
Introduction to the Data Dictionary
One of the most important parts of an Oracle database is its data dictionary, which is a read-only set of tables that provides information about the database. A data dictionary contains:
The definitions of all schema objects in the database (tables, views, indexes, clusters, synonyms, sequences, procedures, functions, packages, triggers, and so on)
How much space has been allocated for, and is currently used by, the schema objects
Default values for columns
Integrity constraint information
The names of Oracle users
Privileges and roles each user has been granted
Auditing information, such as who has accessed or updated various schema objects
Other general database information
конкретно в данном случае например
select * from ALL_TABLES where table_name = something
// and owner =
← →
palva © (2007-12-02 12:35) [4]
> Sergey Masloff (02.12.07 11:28) [2]
> palva © (02.12.07 11:18) [1]
> А таблиц этих 28000 к примеру
Судя по следующему посту вам знакомо слово where. Если у вас затруднения, я могу помочь примером.
← →
Sergey Masloff (2007-12-02 12:44) [5]palva © (02.12.07 12:35) [4]
если про where
то да, если не затруднит то вашим способом - насколько я понял, вы предлагаете что-то вроде вызова OpenSchema(siTables,......) в ADO
where там будет где и на каком этапе.
← →
Anatoly Podgoretsky © (2007-12-02 13:03) [6]> Sergey Masloff (02.12.2007 12:44:05) [5]
OpenSchema, но не в таком случае, не надо привыкать к плохому, примерно так select * from INFROMATION_SCHEMA WHERE *
← →
palva © (2007-12-02 14:15) [7]Sergey Masloff (02.12.07 12:44) [5]
> что-то вроде вызова OpenSchema(siTables,......)
Да-да, именно OpenSchema. Там вторым параметром, где у вас точечки стоят, как раз и будет критерий, который поможет ограничить рекордсет только нужными данными.
> where там будет где и на каком этапе.
where там конечно не будет, да я и не говорил, что оно будет. Просто раз уж вы знаете слово where, то вы легко поймете принцип действия этого критерия.
Например, если вам нужно узнать существует ли таблица "Типы" в базе данных "Борей", вы можете попросить перечислить поля именно этой таблицы. Если такой таблицы не существует, вы получите пустой рекордсет.
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=D:\C\Борей.mdb"
cn.open
Set rs = cn.OpenSchema(4, Array(Empty, Empty, "Типы", Empty))
Do While Not rs.EOF
MsgBox rs.fields("COLUMN_NAME")
rs.MoveNext
Loop
Написал я на VBScript потому что сейчас быстро не вспомню, как на Delphi организовать OLE-массив с критерием, но это можно сделать и на Delphi.
Конечно, было бы лучше чтобы вместо критики [2] вы бы сами разобрались в этом по документации. Ведь мой [1] был не из желания изобразить гуру. Я видел, что вопрос висит и никто не отвечает. Даже если бы я ответил что-то невпопад, то мастера вроде вас меня бы поправили. Правда, не приятно, когда что-то не знаешь и над этим начинают издеваться. Ну да здесь это такой обычай.
← →
Sergey Masloff (2007-12-02 15:04) [8]palva © (02.12.07 14:15) [7]
да я не говорю что так нельзя, просто в ряде случаев это будет очень медленно.
"мой" запрос из [3] будет гарантированно выполняться за O(1) на схеме любого размера.
Restrictions в OpenSchema может работать как фильтр, то есть минимум как O(n) что в принципе нормально но может быть медленно. Конечно базы с десятками тысяч таблиц это как правило ошибки проектирования, но они есть причем в продуктах весьма серьезных вендоров. Завтра запущу ваш и мой варианты на базе в которой только под одним OWNER имеется порядка 30000 таблиц. Результат опубликую, не с целью срывания масок ;-) а просто самому интересно.
Ни в коем случае не хотел Вас задеть, для большого круга задач нормальное решение, но у меня из далекого прошлого страшные воспоминания как ADOTable умирала в designtime при задании TableName на базах с объемной схемой - поэтому и "сделал стойку" ;-)
← →
Новый (2007-12-02 17:25) [9]Sergey Masloff СПАСИБО.... У МЕНЯ ПОЛУЧИЛЬСЯ.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.062 c