powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как получить в переменную вывод системной процедуры? (ASE)
11 сообщений из 11, страница 1 из 1
Как получить в переменную вывод системной процедуры? (ASE)
    #34103325
Xintar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток всем!
Созрел интересный вопрос (ASE 12.5.0.3 && ASE 12.5.1)
Задача такая: каким-то образом получить данные, которые выводит хранимая процедура xp_cmdshell.

Например,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
EXEC xp_cmdshell 'dir c:\'

 Volume in drive C is System_Soft 
 Volume Serial Number is ____-____ 
 Directory of c:\ 
 11 . 10 . 2006    08 : 57     <DIR>          bckup 
 20 . 04 . 2006    12 : 19     <DIR>          compaq 
 20 . 04 . 2006    12 : 18     <DIR>          CPQSYSTEM 
 20 . 04 . 2006    12 : 38     <DIR>          DISTR 
 20 . 04 . 2006    13 : 36     <DIR>          Documents and Settings 
 20 . 04 . 2006    15 : 56     <DIR>          dumpex 
 20 . 04 . 2006    12 : 41     <DIR>          Far 
 20 . 04 . 2006    12 : 21     <DIR>          hp 
 20 . 04 . 2006    13 : 16     <DIR>          idwlog 
 20 . 04 . 2006    13 : 17     <DIR>          inetpub 
 20 . 04 . 2006    14 : 27     <DIR>          install 
 21 . 04 . 2006    08 : 31     <DIR>          Program Files 
 02 . 11 . 2006    18 : 21     <DIR>          sybase 
 20 . 04 . 2006    14 : 57     <DIR>          WINDOWS 
 20 . 04 . 2006    12 : 15     <DIR>          wmpub
                1  File(s)       1 . 316 . 864  bytes 
               15  Dir(s)   44 . 752 . 605 . 184  bytes free 

Хотелось бы этот результат иметь в виде строковой переменной, процедура же возвращает лишь код возврата.
Где начинать копать (и стоит ли?) :-)
...
Рейтинг: 0 / 0
Как получить в переменную вывод системной процедуры? (ASE)
    #34103422
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Направить поток вывода команды вызываемой в xp_cmdshell в файл.
Потом прочитать его - xp_read_file
...
Рейтинг: 0 / 0
Как получить в переменную вывод системной процедуры? (ASE)
    #34103597
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сохранить набор строк, получаемый при xp_cmdshell 'dir c:\' например в во временную таблицу, а потом уже выбирайте, какая конкретно вам строка нужна.

Для того что бы сохранить результат полученный xp_cmdshell 'dir c:' во временную таблицу используете proxy таблицу построенную на основе RPC

типа так
insert #temp_xp_res select * from "proxy таблицы на основе RPC"
...
Рейтинг: 0 / 0
Как получить в переменную вывод системной процедуры? (ASE)
    #34103642
А зачем прокси?
просто нельзя?

create table #ttt (c varchar(255))
insert into #ttt exec xp_cmdshell 'dir c:\'
...
Рейтинг: 0 / 0
Как получить в переменную вывод системной процедуры? (ASE)
    #34103667
Трава у домаА зачем прокси?
просто нельзя?

create table #ttt (c varchar(255))
insert into #ttt exec xp_cmdshell 'dir c:\' в ASE 12.5.1 этот формат не поддерживается
...
Рейтинг: 0 / 0
Как получить в переменную вывод системной процедуры? (ASE)
    #34103679
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Трава у дома
create table #ttt (c varchar(255))
insert into #ttt exec xp_cmdshell 'dir c:\'

А такое сработает? У xp_cmdshell на выходе разве набор данных?
...
Рейтинг: 0 / 0
Как получить в переменную вывод системной процедуры? (ASE)
    #34103700
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так вроде все просто.
EXEC xp_cmdshell 'dir c:\ >111.txt'
SELECT @result=xp_read_file( '111.txt')

Можно и в таблицу, если надо
...
Рейтинг: 0 / 0
Как получить в переменную вывод системной процедуры? (ASE)
    #34103860
Xintar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antandВот так вроде все просто.
EXEC xp_cmdshell 'dir c:\ >111.txt'
SELECT @result=xp_read_file( '111.txt')


Такой вариант уже в голову приходил.

Помеха - отсутствие в ASE 12.5 функции xp_read_file, как в мануале, так и собственно на сервере :-(
...
Рейтинг: 0 / 0
Как получить в переменную вывод системной процедуры? (ASE)
    #34103932
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xintar
Такой вариант уже в голову приходил.

Помеха - отсутствие в ASE 12.5 функции xp_read_file, как в мануале, так и собственно на сервере :-(

Т.к. xp_read_file - это из ф-ция из ASA, в ASE такой точно нет
...
Рейтинг: 0 / 0
Как получить в переменную вывод системной процедуры? (ASE)
    #34104269
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
moris
Т.к. xp_read_file - это из ф-ция из ASA, в ASE такой точно нет
Пардон, не помотрел.
Что-то немного запущено в этом вопросе у ASE:)
Тогда отстается видимо только 3 варианта
1) через прокси таблицы
2) через обычную таблицу. После вызова первого xp_cmdshell с перенаправлением вывода в файл, вызвать xp_cmdshell еще раз для запуска скрипта sql, который загрузит файл в определенную таблицу. Потом считать из этой таблицы
3) написать свою dll и сделать xp_read_file в ASE. Что кстати должно быть не сложно.
...
Рейтинг: 0 / 0
Как получить в переменную вывод системной процедуры? (ASE)
    #34104350
antand Трава у дома
create table #ttt (c varchar(255))
insert into #ttt exec xp_cmdshell 'dir c:\'

А такое сработает? У xp_cmdshell на выходе разве набор данных?

к сожалению нет под рукой XP Server-а чтобы попробовать.
Но в MS SQL Server такое точно работает. По аналогии с ним подумал.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как получить в переменную вывод системной процедуры? (ASE)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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