Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > linux + oracle + sqlplus + awk


Автор: Efes 8.12.2014, 19:12
Привет всем. 

Подскажите, как найти причину несрабатывания скрипта. После миграции log_id все время получается пустым. 

В предыдущей ветке 
http://forum.vingrad.ru/forum/act-ST/f-122/t-381064/unread-1.html
выяснили, что проблема была в awk. 

Было 
Код

awk -F\t


поправил на 
Код

awk '-F\t'

(работает отлично). 

Просьба к знатокам awk подсказать, что подправить здесь (если проблема тоже в awk)? 
Заранее благодарен. 

Код

        log_id=$(sqlplus -s /nolog <<-EOF|awk 'NR==2 {print $1}'
                set head off
                set feed off
                set pagesize 0
                conn $DBCONN_AUDIT
                select pls_audit.get_id_log from dual;
#EOF)


До миграции:
Код

$ cat /etc/*{release,version}
                   Oracle Solaris 10 9/10 s10s_u9wos_14a SPARC
     Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
                            Assembled 11 August 2010

Oracle 10

После миграции:
Код

$ uname -a

SunOS nap7-plsm5k-1 5.10 Generic_144488-10 sun4u sparc SUNW,SPARC-Enterprise

Oracle 11g

Автор: tzirechnoy 8.12.2014, 20:57
Скорее всего -- нужно просто EOF), а не #EOF) -- и если да, то у вас при миграцыи произошла какая-то херня с табами в скриптах.

Но если нет -- то покажыте вывод при включённом xtrace (т.е. добавьте строчку set -x перед этой строкой), и заодно, покажыте вывод SELECT pls_audit.get_id_log from dual;

Автор: Efes 8.12.2014, 21:42
Цитата(tzirechnoy @ 8.12.2014,  20:57)
Скорее всего -- нужно просто EOF), а не #EOF) -- и если да, то у вас при миграцыи произошла какая-то херня с табами в скриптах.

Но если нет -- то покажыте вывод при включённом xtrace (т.е. добавьте строчку set -x перед этой строкой), и заодно, покажыте вывод SELECT pls_audit.get_id_log from dual;

 Добавил set -x, вот результат: 

Код

+ sqlplus -s /nolog
+ awk NR=='2 {print $1}'
+ 0<< \EOF
                set head off
                set feed off
                set pagesize 0
                conn user1/password1@plspro
                select pls_audit.get_id_log from dual;
EOF
+ log_id=''
+ sqlplus /nolog
+ 0<< \EOF



SELECT pls_audit.get_id_log from dual

2225700 

(сиквенс работает нормально). 

Есть идеи? 

Автор: Efes 8.12.2014, 23:22
А так работает: 

Код

echo -e "conn user1/pass1@plspro\nselect pls_audit.get_id_log from dual;" | sqlplus -s /nolog

GET_ID_LOG
----------
  33363309


Пожалуйста, помогите исправить изначальный код.

Автор: tzirechnoy 9.12.2014, 00:28
Так, а если через эхо добавить set head off\nset feed off\nset pagesize 0 -- то какой результат sqlplus -s /nolog будет?

Да, Вы, кстати, попробовали убрать # в строке EOF -- изменилось ли что-нибудь?

(то есть код в принцыпе, кроме этого момента с решёткой -- банальный, всего-то записывает в переменную первое поле второй строку вывода sqlplus с таким вводом.)

Автор: Efes 9.12.2014, 00:29
А что вообще значит вот та часть? 

Код

{print $1}

Автор: tzirechnoy 9.12.2014, 12:47
Напечатать первое поле и перевод строки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)