Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Perl + sqlplus) Как соединиться с базой???? / 9 сообщений из 9, страница 1 из 1
05.04.2006, 08:32:47
    #33645096
CookieGirl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl + sqlplus) Как соединиться с базой????
Надо написать прогу на perl, которая бы получала данные из БД(Oracle)..Соединяться надо через sqlplus.Понятия не имею как это сделать, нашла какой-то пример :

$resultfile = "$tmpDir/tables.txt";
$tempfile = "$tmpDir/temp.txt";

open(TMP, ">$tempfile");

print TMP <<EOF;
SET PAGESIZE 0
SET FEEDBACK OFF
SET LINESIZE 30
SPOOL $resultfile
SELECT table_name FROM user_tables;
SPOOL OFF
EXIT
EOF

print `sqlplus -s abc/abc123@database <$tempfile`;

print "\nreturn code = ", system
"sqlplus -s abc/abc123@database<;$tempfile";

open (TABLES, $resultfile);
print "\n\n", <TABLES>;


Но когда это все запускаешь, пишет

ORA-12545: Connect failed because target host or object does not exist

Что это есть такое??? Если кто-нибудь делал что-то подобное, скиньте,плиззззз! Спа!
...
Рейтинг: 0 / 0
05.04.2006, 12:08:41
    #33645768
Doser UES
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl + sqlplus) Как соединиться с базой????
Я, в Оракле не соображаю, но возникли вопросы:

1. Почему надо соединяться через SQL+, через DBI нельзя?
2. Можно ведь решать задачу поэтапно. Допустим этот пример не заработал, и пишет, что не может соединиться с таким хостом/базой/или чем-то еще.
Напрашивается вопрос:
а) через SQL+ в интерактивном режиме такой запрос проходит?
б) через SQL+ с передачей ему файла запроса (в котором написано
SET PAGESIZE 0
SET FEEDBACK OFF
SET LINESIZE 30
SPOOL $resultfile
SELECT table_name FROM user_tables;
SPOOL OFF
EXIT)
проходит?
в)если все это работает, значит искать надо ошибку в коде Perl-программы:
Вместо переменных подставить фиксированные строки и посмотреть результат. и.т.д.
Не слишком ламерский совет?
...
Рейтинг: 0 / 0
05.04.2006, 12:39:18
    #33645913
Doser UES
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl + sqlplus) Как соединиться с базой????
И потом, в программе в строке:
print `sqlplus -s abc/abc123@database <$tempfile`;
так же как и в строке:
rint "\nreturn code = ", system "sqlplus -s abc/abc123@database<;$tempfile";
все переменные будут интерпретироваться. Получается Perl-программа ищет и не находит массив @database (как она думает) и вместо него вставляет пустую строку.

Если такую строку на:
my $cmd='sqlplus -s abc/abc123@database <$tempfile';# в одиночных кавычках
print "\n return code=", system $cmd;

Результат изменится?
...
Рейтинг: 0 / 0
06.04.2006, 11:24:36
    #33648399
CookieGirl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl + sqlplus) Как соединиться с базой????
Да, уж всё попробовала, а результат один и тот же :
ORA-12545: Connect failed because target host or object does not exist
Надо делать почему-то именно через sqlplus, а не через DBI...
...
Рейтинг: 0 / 0
06.04.2006, 12:08:00
    #33648603
oraweb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl + sqlplus) Как соединиться с базой????
Может это
http://www.interface.ru/fset.asp?Url=/oracle/operl.htm
поможет?
В подробности не вникал, но про sqlplus упоминается.

[p align=right]
Теперь свой собственный internet-ресторан может открыть любой желающий!
[/p]
...
Рейтинг: 0 / 0
06.04.2006, 12:19:34
    #33648642
oraweb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl + sqlplus) Как соединиться с базой????
У себя запустил
Код: plaintext
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.
29.
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "this is a perl scripting example:\n";

$resultfile = "scott.tables";
$tempfile = "temp.file";

open(TMP, ">$tempfile");

print TMP <<EOF;
SET PAGESIZE  0 
SET FEEDBACK OFF
SET LINESIZE  30 
SPOOL $resultfile
SELECT table_name FROM user_tables;
SPOOL OFF
EXIT
EOF

print `sqlplus -s scott/tiger <$tempfile`;

print "\nreturn code = ", system "sqlplus -s scott/tiger <$tempfile";

open (TABLES, $resultfile);
print "\n\n", <TABLES>;

print "\nend of example\n";


получил
Код: plaintext
1.
this is a perl scripting example: BONUS DEPT EMP SALGRADE BONUS DEPT EMP SALGRADE return code =  0  BONUS DEPT EMP SALGRADE end of example 


Теперь свой собственный internet-ресторан может открыть любой желающий!
...
Рейтинг: 0 / 0
07.04.2006, 10:58:03
    #33651202
oraweb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl + sqlplus) Как соединиться с базой????
CookieGirlНадо делать почему-то именно через sqlplus, а не через DBI...
А Вы не могли бы попросить своего работодателя обосновать свое решение, указав, например, на ресурс в инете, где имеет место сравнительный анализ обоих методов - преимущества и недостатки?
Ну как, законектиться удалось?
...
Рейтинг: 0 / 0
10.04.2006, 09:06:47
    #33654899
CookieGirl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl + sqlplus) Как соединиться с базой????
Хммм...по отдельности всё работает, но соединиться так и не получилось..Почему-то даже простое соединение не работает:
#! /usr/bin/perl

$command = 'sqlplus abc/abc123@db';
print "$command";
print "status" . system "sqlplus abc/abc123@db";

результат :
ORA-12545: Connect failed because target host or object does not exist
...
Рейтинг: 0 / 0
10.04.2006, 10:33:08
    #33655092
Doser UES
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl + sqlplus) Как соединиться с базой????
print "status" . system $command;
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Perl + sqlplus) Как соединиться с базой???? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]