2009-08-14 5 views
0

я написал SQL по имени cashload.txt на UNIX коробки и все это на следующем месте на UNIX коробке:оракул золотник запрос

exit |sqlplus -s batch/[email protected]_TEST @/soft/checkfree/AccurateBXG/scripts/cashload.txt 

В cashload.txt ниже код написан:

spool /Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv 
select accountnumber||','||accountname||','||X from HSBC_Cash_OIbyAccount_v; 
spool off 

Но это не наматывая результат, установленный на упомянутый выше path.However, когда я даю путь, где хранятся скрипт, он намотка на этом location.I не понимает, почему? это буферизуется по нижерасположенному пути, где наличными load.txt (SQL-скрипт) хранится:

**spool /soft/checkfree/AccurateNXG/scripts/Rep_OIbyAccount.csv** 
select accountnumber||','||accountname||','||X from HSBC_Cash_OIbyAccount_v; 
spool off 

Пожалуйста, смотрите в приведенном выше запросе и помочь мне. Спасибо заранее!

+0

Неправильная практика использования расширения .txt для SQL-скрипта. Любой, кто смотрит на ваши файлы, ожидает, что исполняемый SQL будет в скрипте с расширением .sql.Только неисполняемым ASCII-файлам должно быть предоставлено расширение .txt. – APC

+1

Что происходит, когда вы: 1) из командной строки введите команду «сенсорный Detail/отчеты/внутренний/SW/Rep_OIbyAccount_TEST.csv» 2) исключить переменную оболочки $ DATE_FILE от имени золотник файла, например " spool /Detail/reports/inner/SW/Rep_OIbyAccount_TEST.csv " ? – dpbradley

ответ

0

Можете ли вы воспроизвести значение «/Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv»?

Единственная причина, по которой я могу думать, это a) Вышеуказанное местоположение не является допустимым путем b) У вас нет прав на запись в это место.

У вас есть ошибка в первом случае или вообще ничего не происходит?

+0

Я не получаю никаких ошибок в первом случае, вообще ничего не происходит. Любая идея? –

+0

Вы проверили, есть ли у вас разрешения, предложенные APC? Как насчет выполнения chmod и chown в каталоге «detail/reports/inner/sw» для учетной записи oracle? Вы попробовали это? – Preets

0

Выполняется ли без использования бесшумного (-s) варианта?

+0

no, ничего не отображается ... Это соединение сеанса и после завершения задачи, которую он отключает. –

1

Почти наверняка проблема с правами доступа к файлам. Помните, что когда мы взаимодействуем с ОС изнутри базы данных, мы используем учетную запись oracle, а не учетную запись, с которой мы подключались.

У учетной записи oracle есть права на запись в/Detail/reports/inner?

+0

Поскольку это буферизация от клиента SQLPlus, вопрос в том, действительно ли учетная запись пользователя, использующая SQLPlus, имеет разрешение на запись в каталог. –

2

Если я правильно понимаю, DATE_FILE - это переменная оболочки, которую вы хотите заменить на имя файла спула. Это может быть частью или всей вашей проблемой. Я не думаю, что вы можете ссылаться на него непосредственно из SQLPlus. Вам необходимо передать это как параметр в сценарий, а затем ссылаться на него как переменную замещения SQLPlus.

Таким образом, командная строка будет выглядеть так:

sqlplus -s batch/[email protected]_TEST @/soft/checkfree/AccurateBXG/scripts/cashload.txt $DATE_FILE 

И команда золотник в сценарии будет:

spool /Detail/reports/inner/SW/Rep_OIbyAccount_&1..csv 

(Дополнительный период необходим, потому что он служит в качестве терминатора к substition имя переменной.)

0

Указанный вами путь имеет символ $, который вызывает проблему. Чтобы избежать этого, просто укажите путь и имя файла в " ". Это должно решить проблему:

SPOOL "/Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv " 
0

Возможно, вы можете попробовать следующее, чтобы узнать, генерирует ли он желаемый результат. Он будет помещен в каталог, в котором вы сейчас находитесь.

set termout off 
set echo  off 
set linesize 140 
set feedback off 
set pagesize 0 

spool DATE_FILE.csv 
select accountnumber 
     ||',' 
     ||accountname 
     ||',' 
     || X 
    from HSBC_Cash_OIbyAccount_v; 
spool off 
ed DATE_FILE.csv