Проблема при выполнении запроса oracle

#perl #oracle

#perl #Oracle

Вопрос:

     Below is the module in sybase.


   sub execute_query{
    $connect = "isql  -S $SERVER-U $USER -P $PASS -D $DBNAME";
    $pid = open2(*Rder, *Wrter, "$connect");
    Writer->autoflush();
    print Write qq!         
    set transaction isolation level 0
    go
    Select * from remtrench
    go
    !;
    Wrter->close();
    while(<Rder>)
     {
      Parse data
      }
  

Приведенный выше код внес изменения для поддержки oracle ниже.
Я смог подключиться к oracle.Но выбор запроса к базе данных и другого запроса, кроме connection, не работает.Пожалуйста, направьте меня

     sub execute_query{
    $connect = "sqlplus  $USER/PASS@SERVER
    $pid = open2(*Rder, *Wrter, "$connect");
    Writer->autoflush();
    alter session set current_schema = $DBNAME;
    Select * from remtrench;
    Writer->close();
     ....
     }
  

Вышеупомянутое мое изменение не работает для сеанса изменения другого запроса (select).Погуглил о том, как выполнить несколько запросов.Но все равно это мне не помогает.
Спасибо.

Комментарии:

1. извините, я не могу понять, о чем вы пытаетесь спросить. Возможно, вы могли бы рассказать нам, какое сообщение об ошибке вы получаете? «Не работает» не помогает.

Ответ №1:

Это из-за отсутствия закрывающей кавычки во второй строке?

В качестве альтернативы, почему вы взаимодействуете с базами данных, используя их программы командной строки? Вы должны использовать что-то вроде DBI или DBIx::Class.

Комментарии:

1. Нет .. В любом случае, использование DBI — лучшее предложение.. Спасибо

Ответ №2:

сеанс ALTER будет действителен в пределах этого сеанса, но не в том случае, если вы откроете больше сеансов для каждой команды sql.

Вы можете просто добавить префикс к объектам базы данных в своих запросах, чтобы обойти это требование, например, путем ссылки на таблицы, подобные этой:

 SELECT * FROM USER.TABLE