2013-06-13 1 views
0

Раньше я использовал dbi как db.do("select * from table") и получил нужные результаты, однако теперь мне нужно использовать схему для доступа к таблицам, которые мне нужны, и приведенная выше строка даст мне ошибка DBI:Синтаксис для Ruby DBI с базой данных Oracle и схемой

DBI::ProgrammingError: ORA-00942: table or view does not exist 
    from stmt.c:312:in oci8lib.so 
    from C:/ruby/lib/ruby/gems/1.8/gems/ruby-oci8-2.0.6-x86-mingw32/lib/oci8/oci8.rb:288:in `exec' 
    from C:/ruby/lib/ruby/gems/1.8/gems/ruby-oci8-2.0.6-x86-mingw32/lib/dbd/OCI8.rb:354:in `execute' 
    from C:/ruby/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi/base_classes/database.rb:96:in `execute' 
    from C:/ruby/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi/base_classes/database.rb:114:in `do' 
    from C:/ruby/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi/handles/database.rb:106:in `do' 
    from (irb):35 
    from ♥:0 

я могу получить доступ к таблице с этим db.do("select * from schema.table") однако я предпочел бы не менять каждую строку из table в schema.table.

Скажите, пожалуйста, как я могу заставить мои скрипты работать, не меняя линию?

ответ

0

Попробуйте запустить db.do ("SET SCHEMA SCHEMA_NAME") перед выполнением любых других операторов

Edit: Правильный синтаксис: db.do ("ALTER SESSION SET CURRENT_SCHEMA = SCHEMA_NAME")

Это изменит вашу схему по умолчанию на ту, на которую вы хотите работать в течение всего сеанса.

+0

Спасибо за ответ SimonV. Когда я пытаюсь выполнить эту команду, я получаю «DBI :: DatabaseError: ORA-00922: недостающая или недопустимая опция» –

+0

Попробуйте с этим синтаксисом: ALTER SESSION SET CURRENT_SCHEMA = SCHEMA_NAME – SimonV

+0

Сладкий, похоже, что это трюк. Можете ли вы изменить свой главный ответ, чтобы я мог отметить его как ответ? –