![]() |
|
Модераторы: LSD |
![]()
|
|
| Castro |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 31.8.2007 Где: Украина Репутация: нет Всего: 5 |
Привет всем.
Появилась надобность ежедневно проверять наличие данный в таблицах базы. Но не во всех, а в определённых и этот список будет хранится в отдельной таблице. Получить список таблиц которые будеи проверять легко, но я не могу понять как написать процедуру которая бы подставляла этот список в запрос проверки данных. Только начал учить PL/SQL. Это цикл какой-то дожен быть? |
|||
|
||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Если просто нужно узнать количество строк то можно воспользоваться вьюхой all_tables (поле num_rows). Но! для этого статистика по таблице должна быть актуальной.
Если же нужно узнавать наличие каких-то определённых данных, то можно воспользоваться динамическим sql: http://mab.h1.ru/OTHER/dplsql.html Это сообщение отредактировал(а) ToshaCh - 22.5.2009, 19:05 -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| Castro |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 31.8.2007 Где: Украина Репутация: нет Всего: 5 |
Чёрт, не работает ваша ссылка но похоже, что динамический sql - это оно. Но всё равно хотелось бы конкретных советов от человека, который занимался динамическим sql-ом. Я нашёл всего пару примеров но они какие-то неявные, а очень хочется и нужно разобраться во всём этом.
Хотелось бы начать с простого. Например, есть 2 таблицы a и b, к обоих есть поле time_info хранящее дату. Запросом узнаю, есть ли какоя-то запись в таблице за сегодня. Если нет - пишу в таблицу result , например, дату и название таблицы с отсутствующей датой. Как сделать такую схему с помощью динамического запроса? |
|||
|
||||
| ToshaCh |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Странно я щас по сслыке перешёл, походу она перманентно оживает.
Твой пример можно разобрать где-то вот так. (не судите строго написал за 5 минут, мимоходом левой задней ногой)
В результате:
Добавлено через 2 минуты и 44 секунды З.Ы. Ну уж со вставкой в таблицу result думаю и сам разберёшься. -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
||||
|
|||||
| Castro |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 31.8.2007 Где: Украина Репутация: нет Всего: 5 |
Так-так. А вот это мне уже нравится
|
|||
|
||||
| Castro |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 31.8.2007 Где: Украина Репутация: нет Всего: 5 |
Так.
Теперь чтобы дать гибкости, нужно передавать как параметр проверять наличии значений ещё по одному полю в некоторых таблицах (По идее будет так - в таблице С лежат список таблиц(как сделали Вы), а таблице D - список полей каждой из этих таблиц, таблицы связаны по id (c.id = d.id)). Как научить процедуру принимать внешние параметры, или же можно сделать как-то изнутри всё это, как это сделали Вы? Попробовал вот такОбернул всё это дело в процедуру
|
|||
|
||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
declare здесь не надо Пробелов не хватает - синтаксическая ошибка будет. А вот в чём вопрос я не понял. Сейчас у тебя получилось, что для всех таблиц будет один и тот же вариант дополнительного поля, зависящий от того как ты вызовешь проседуру. -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| Castro |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 31.8.2007 Где: Украина Репутация: нет Всего: 5 |
Идея в том что есть, как Вы создали уже, таблица С, где будет хранится список исследуемых таблиц, и будет ещё связанная с ней таблица D, в которой будут хранится имена полей какждой из исследуемых таблиц. Количество полей во всех таблицах разное, для упрощения скажем что их будет 10 (точно сам пока не знаю). Эти таблицы связаны по id.
Мне нужно чтобы процедура брала с таблицы С имя исследуемой таблицы, и в WHERE проверяла связаныне на пустоту поля из таблицы D. |
|||
|
||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Ну тогда как-нить так:
-------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| Castro |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 31.8.2007 Где: Украина Репутация: нет Всего: 5 |
Похоже на правду.
Правда, не понял строчку 4
Что должно по идее вернуть
? |
||||
|
|||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Ну дык!
-------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| Castro |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 31.8.2007 Где: Украина Репутация: нет Всего: 5 |
Нет, меня смутило то, что из
я не понял откуда возьмётся переменная column_name ? А строка 4, когда подставиться имя колонки, например
|
||||
|
|||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Это не переменная это поле таблицы d
-------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| Castro |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 31.8.2007 Где: Украина Репутация: нет Всего: 5 |
Гляньте, пожалуйста, ещё раз на конечный вариант процедуры и проверте всё ли на месте и ничего я не напутал ли. Идею я понял, но мог что-то напутать с реализацией
|
|||
|
||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
С чего это? Представь что там получается в переменной stmt сейчас? -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
![]()
|
| Правила форума "Oracle" | |
|
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Oracle | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |