Оператор выбора SQL в UNIX внутри / внутри оператора IF..THEN - PullRequest
2 голосов
/ 12 ноября 2008

Я просто хочу спросить шаги при попытке создать простой оператор выбора SQL в UNIX внутри / внутри оператора IF..THEN..FI.

Я знаю, как использовать операторы «select» и «if..then» в SQL * Plus, но у меня возникают трудности с сценарием UNIX для указания переменных: если «ABC» - «Select» .

Пример:

if ["$?" = 'ABC'] затем ВЫБЕРИТЕ Employid, Name, Age FROM tablename; еще выход 1 фи

if ["$?" = 'XYZ'] затем ВЫБЕРИТЕ Employid, Name, Age FROM tablename; еще выход 1 фи

Как мне поставить его в сценарии UNIX более правильно с точки зрения синтаксиса и прямо в точку?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 12 ноября 2008

Похоже, вы пытаетесь встроить SQLPlus в сценарий оболочки. По памяти заклинание должно выглядеть примерно так:

if [ $? -eq ABC ]; then
SQLPLUS /S USER/PASS@Instance <<EOF
SET echo off;
SET pagesize 0;
SET heading off;
SPOOL foo.out
select foo from bar
EOF
fi

Все, что находится между SQLPLUS и EOF, передается в SQLPlus, поэтому у нас есть несколько операторов для управления форматированием (могут потребоваться другие) и фактическим запросом. Команда SPOOL в сценарии SQLPlus отправляет вывод в файл. Более подробные документы по использованию SQLPlus можно загрузить с веб-сайта Oracle.

1 голос
/ 30 декабря 2008

Рассматривали ли вы использование perl или другого языка сценариев, который включает в себя функцию подключения к базе данных. Таким образом вы избежите неуклюжий сценарий оболочки / SQL * Plus linking

1 голос
/ 12 ноября 2008

Помните, что echo ваш друг.

if [ "$?" = "ABC" ] then echo SELECT employid, name, age FROM tablename; else exit 1; fi

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

0 голосов
/ 12 ноября 2008

Ответ выше был в порядке. Однако я знал, что, используя SQLPlus в сценарии оболочки, и, к сожалению, мне не нужен сценарий SQLPlus для отправки вывода в файл. Другими словами: есть ли другой способ сделать это, просто распечатать вывод в журнал?

...