Автор Тема: Многострочные sql запросы  (Прочитано 5187 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Многострочные sql запросы
« : 11 Июля 2006, 13:25:29 »
Собственно вопрос: есть ли какой метод в DBI чтобы посылать несколько SQL комманд разделенных точкой с запятой хронящихся в переменной куда были считанны из файла? Можно организовать через do, разбивая в цикле на строки и выполняя по одной комманде, но мне кажется это будет медленней чем просто в system вызвать sqlplus в тихом режиме, речь идет об Oracle.

Кто-то может что-то посоветовать?
« Последнее редактирование: 12 Июля 2006, 16:55:21 от vladsu »
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Многострочные sql запросы
« Ответ #1 : 11 Июля 2006, 13:34:38 »
зависит от драйвера.

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Многострочные sql запросы
« Ответ #2 : 11 Июля 2006, 14:11:06 »
Это ответ на какой из вопросов?
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Многострочные sql запросы
« Ответ #3 : 12 Июля 2006, 11:27:46 »
Для DBI я решения для 1-го вопроса не нашел... :(
Космическая игрушка

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Многострочные sql запросы
« Ответ #4 : 12 Июля 2006, 11:39:42 »
Драйвер скорее всего DBD::Oracle.
Вызов внешней программы для работы с БД имхо плохая идея, так как возможности контролировать это приложение невысоки по сравнению с управлением и контролем за запросами средствами DBI.
И почему вы считаете что считывать из файла будет медленней?
Есть такой модуль SQL::Statement, вот некоторые его возможности:

 #!/usr/bin/perl -w
 use strict;
 use SQL::Statement;

 my $cache={};
 my $parser = SQL::Parser->new();
 for my $sql(split /\\n/,
 "  CREATE TABLE a (b INT)
    INSERT INTO a VALUES(1)
    INSERT INTO a VALUES(2)
    SELECT MAX(b) FROM a  "
 ){
    $stmt = SQL::Statement->new($sql,$parser);
    $stmt->execute($cache);
    next unless $stmt->command eq \'SELECT\';
    while (my $row=$stmt->fetch) {
        print "@$row\\n";
    }
 }
 __END__

Возможно вам стоит его попробовать.
« Последнее редактирование: 12 Июля 2006, 12:05:13 от cr4ck3r »
Ворота в perl - perlmonks.org.ru

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Многострочные sql запросы
« Ответ #5 : 12 Июля 2006, 14:31:04 »
Цитировать
cr4ck3r:
Вызов внешней программы для работы с БД имхо плохая идея, так как возможности контролировать это приложение невысоки по сравнению с управлением и контролем за запросами средствами DBI.

А мне это и не нужно, я уверен на 100%, что стейтменты корректны, моя задача их выполнить на опред. базу.

Цитировать
cr4ck3r:
И почему вы считаете что считывать из файла будет медленней?

Вы внимательно прочли моё сообщение? Я не говорил, что считывание из файла будет медленно, я сказал что запуск по одному стейтменту, через do, может оказаться медленней чем, через sqlplus напрямую. Кстати предложенный Вами модуль делает именно это, т.е. для меня он обсолютно бесполезен!!! Т.к. разбиение на строки переменной/файла я и сам уж как-нибудь могу организовать, а запуск по одному стейтменту и в DBI реализован, через метод do. И еще почему не подходит упомянутый модуль, нигде не сказанно что стейтмент должен находится на одной строке, поэтому нужно будет позаботится о контроле окончания стейтментов, а не просто \\n, а это опять код, поэтому гораздо проще, видимо, использовать sqlplus.

Всем спасибо!
« Последнее редактирование: 12 Июля 2006, 16:54:07 от vladsu »
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28