#informix
Вопрос:
У меня есть база gcd001
данных, содержащая несколько таблиц tab1
tab2
, tab3
содержащих данные, и вторая база dde002
данных, содержащая те же таблицы tab1
tab2
, tab3
но без данных.
Я пытаюсь создать скрипт, который создаст синонимы между таблицами этих двух баз данных. Я попробовал что-то вроде:
# !/bin/sh
# USAGE : cresyn.sh {dtabase_with_data} {dtabase_no_data} {Table}
dtabase_with_data=$1
dtabase_no_data=$2
Table=$3
dbaccess $1 CREATE SYNONYM $1 FOR $2:$3;
done
но это не сработало, и я действительно не знаю, как это сделать.
Вы можете помочь?
Ответ №1:
Команда DB-Access не интерпретирует аргументы командной строки подобным образом. Его схема использования такова:
dbaccess [-|database] [-|script]
Он добавит .sql
расширение в script
аргумент, если вы его не укажете (поэтому он выполняет только .sql
файлы). Без опции сценария он становится интерактивным, если выбрать именованную базу данных. Без именованной базы данных она также становится интерактивной, без предварительного выбора базы данных. Тире для имени сценария означает «чтение стандартного ввода». Тире для имени базы данных означает «не выбирайте базу данных заранее»; предположительно сценарий выберет или создаст саму базу данных.
Вы, вероятно, захотите использовать:
if [ $# != 3 ]
then
echo "Incorrect arguments. Usage: $0 db_with db_without tablename" >amp;2
exit 1
fi
dbaccess $2 - <<EOF
CREATE SYNONYM $3 FOR $1:$3;
EOF
Это подключается к «базе данных без данных» ( $2
) и создает синоним с тем же именем, что и таблица ( $3
), ссылающаяся на эту таблицу в «базе данных с данными» ( $1
). Вы могли бы использовать переменные, которые вы установили, но тоже не использовали.
Обратите внимание, что таблицы tab1
.. tab3
не могут существовать в «базе данных без данных» до создания синонимов. Или вам нужно использовать альтернативное имя для синонимов, например syn_tab1
, .. syn_tab3
(но тогда ваш сценарий должен принимать аргументы для существующего имени таблицы и создаваемого синонима.
Комментарии:
1. Спасибо, Джонатан, я действительно новичок в Informix, и ваши ответы каждый раз многому меня учат.