запрос спула оракула

Я написал sql по имени cashload.txt в блоке unix и сохранил его в следующем месте в блоке unix:

exit |sqlplus -s batch/password@SW_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

Но это не буферизация результирующего набора по указанному выше пути. Однако, когда я указываю путь, где хранится скрипт, он буферизуется в этом месте. Я не понимаю, почему? Он буферизуется по указанному ниже пути, где сохраняется cashload.txt (сценарий sql):

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

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


person Community    schedule 14.08.2009    source источник
comment
Не рекомендуется использовать расширение .txt для сценария SQL. Любой, кто просматривает ваши файлы, будет ожидать, что исполняемый SQL будет в сценарии с расширением .sql. Только неисполняемые файлы ASCII должны иметь расширение .txt.   -  person APC    schedule 14.08.2009
comment
Что происходит, когда вы: 1) из командной строки вводите команду touch Detail/reports/inner/SW/Rep_OIbyAccount_TEST.csv 2) удаляете переменную оболочки $DATE_FILE из имени файла спула, например spool /Detail/reports/inner/ SW/Rep_OIbyAccount_TEST.csv ?   -  person dpbradley    schedule 14.08.2009


Ответы (6)


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

Таким образом, командная строка будет:

sqlplus -s batch/password@SW_TEST @/soft/checkfree/AccurateBXG/scripts/cashload.txt $DATE_FILE

И команда spool в скрипте будет такой:

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

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

person Dave Costa    schedule 14.08.2009

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

Итак, есть ли у учетной записи оракула права на запись в /Detail/reports/inner ?

person APC    schedule 14.08.2009
comment
Поскольку это буферизация из клиента SQLPlus, на самом деле вопрос заключается в том, имеет ли учетная запись пользователя, выполняющая SQLPlus, разрешение на запись в каталог. - person Dave Costa; 14.08.2009

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

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

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

person Preets    schedule 14.08.2009
comment
Я не получаю никаких ошибок в первом случае, в целом ничего не происходит. Любая идея?? - person ; 14.08.2009
comment
Вы проверили, есть ли у вас разрешения, предложенные APC? Как насчет выполнения chmod и chown в каталоге detail/reports/inner/sw для учетной записи oracle? Вы пробовали это? - person Preets; 14.08.2009

Дает ли вам более подробную информацию работа без опции тишины (-s)?

person Hobo    schedule 14.08.2009
comment
нет, ничего не отображается... Он подключает сеанс и после завершения задачи отключается. - person ; 14.08.2009

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

SPOOL "/Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv "
person kishan    schedule 17.09.2010

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

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
person r0tt    schedule 02.04.2016