Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.23;
Скачать: CL | DM;

Вниз

Как программно можно проверть, существуеть ли таблиц в Оракле   Найти похожие ветки 

 
Новый   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
2-1196243768
tytus
2007-11-28 12:56
2007.12.23
Как переделать запрос, чтобы вывелось то чего нету?


15-1195650597
Cyrax
2007-11-21 16:09
2007.12.23
PHP5: Как считать без "бонусов" массив из переменной $_REQUEST


15-1195739912
alsov
2007-11-22 16:58
2007.12.23
Сборка серверой части приложения на Oracle


2-1196082528
Angelka
2007-11-26 16:08
2007.12.23
Memo


2-1196459325
deras
2007-12-01 00:48
2007.12.23
Помогите с запросом