Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1195944028
Суслик
2007-11-25 01:40
2007.12.23
Некие новости о Delphi


11-1180718313
Galkov
2007-06-01 21:18
2007.12.23
Использование EM_GETSEL в KOL


2-1196249636
Alex_C
2007-11-28 14:33
2007.12.23
Вопрос по Canvas.TextOut


15-1195716063
stone
2007-11-22 10:21
2007.12.23
Законы и их исполнение


2-1195940070
ProgRAMmer Dimonych
2007-11-25 00:34
2007.12.23
Проблема с D3DX8





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский