LINUX.ORG.RU

Определить переменную для SQL запроса

 ,


0

1

Доброго времени суток

Я не DBA и не собираюсь им становиться, сейчас моя задача - понять наскоро структуру БД, чтобы на perl генерить отчёты с данными из этой БД.

  • Инструмент изучения: SQLexplorer
  • СУБД: oracle 9
  • В окне SQL Editor ввожу запросы, в окне messages появляется таблица с результами запроса. Не представляю в каком формате идёт обмен между SQLexplorer'ом и БД :\

Есть таблица X для связи нескольких других, в ней поля id1, id2, ..., idn. Я пока не знаю, с какими именно таблицами она связана, беру из первой попавшейся таблицы A поле id_A = 12345 и ищу по всему X

select * from x where ( id1 = 12345) or (id2 = 12345 ) or ... or  ( idn = 12345);

Оно работает. Но запросов предполагается много, хотелось бы вставить туда переменную. Как правильно это сделать? Объявляю через declare - ORA-06550, судя по всему предлагается использовать PL/SQL и следовательно явно указывать, куда вставить результат. А мне нужно его просто увидеть в sqlexplorer'е ( да, мне вон тот, красненький ). Нагуглить работающий вариант не удалось.

Я умею читать документацию, но в совершенно чужой области не знаю что искать :\ Посоветуйте что-нибудь по этой теме.

★★★★★

Последнее исправление: router (всего исправлений: 3)

В Perl должны быть стандартные библиотеки для доступа к SQl-базам (DBI?).

Но запросов предполагается много, хотелось бы вставить туда переменную

Вместо id1..idN? Если втупую - можно просто динамически генерировать запрос.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Да, раз с SQL я не справился, пришлось решать средствами Perl. Но вопрос о документации по-прежнему актуален: хочу понять где я ошибался.

router ★★★★★
() автор топика
Последнее исправление: router (всего исправлений: 1)

use DBI;
...
$dbh->prepare(«select * from ? where ( id1 = 12345) or (id2 = 12345 ) or ... or ( idn = 12345);», $tablename) or die $dbh->errstr;

AITap ★★★★★
()

посмотреть какие есть constaints на таблицу X нельзя? (гугл, ~ show foreign key constraints)

mashina ★★★★★
()
Ответ на: комментарий от router

как в чистом SQL корректно объявить переменную?

В чистом SQL нет переменных. Можно создать временную таблицу, но это не совсем то.

tailgunner ★★★★★
()

Тебе нужно структуру базы понять? Может, тупо в консоли приконнектиться, там должна быть команда для описания, сколько я помню, то ли schema, то ли describe.

Hoodoo ★★★★★
()
Ответ на: комментарий от tailgunner

Т.е. переходить на PL/SQL,и вставлять результат в вьюху/курсор и смотреть их как результат?

router ★★★★★
() автор топика
Ответ на: комментарий от Hoodoo

Нет, мне нужны были не поля таблиц, а именно логические связи между ними. И эту задачу я уже решил.

router ★★★★★
() автор топика
Ответ на: комментарий от router

однако для сложных отчетов тебе может потребоваться и переменные и кое что позабористее, так вот в oracle поддерживаются анонимные процедуры.

Deleted
()
Ответ на: комментарий от router

Не, ну мало ли. Идиот мог как раз базу написать без ключей например. :3

Hoodoo ★★★★★
()
Ответ на: комментарий от router

Вообще ты почитай что-нибудь по базам - для того, чтобы понять, что там в принципе можно, например, Head First SQL (можно не делать упражнения и управиться за день) и документацию по разным СУБД.

Что это даст:
- запомнится, что вроде как вот такую вещь можно сделать как-то так, потом детали можно будет загуглить
- вычитаешь пару полезных вещей, например, как использовать из консоли СУБД сторонний редактор, сторонний пейджер, выгружать схемы и результаты отработки запросов в файлы, форматировать вывод

Эти затраты времени отобьются обязательно, я тоже далеко не DBA и вообще любитель, а иногда пригождается.

Hoodoo ★★★★★
()
Последнее исправление: Hoodoo (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.