You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Informix跨不同数据库创建表同义词的shell脚本实现问题

Informix同义词创建脚本调整方案

原有脚本错误点

  • 末尾存在多余的done关键字,无对应循环结构,执行直接报错
  • dbaccess调用方式错误:不支持直接将SQL语句作为命令行参数传入,需要通过标准输入传递SQL
  • 同义词语法逻辑反向:CREATE SYNONYM 后接待创建的同义词名称,FOR后接实际映射的源表,原脚本参数顺序完全颠倒
  • 变量拼写存在笔误:dtabase应为database,易引发后续维护错误

修复后脚本

单表处理版本

保存为cresyn.sh:

#!/bin/sh
# USAGE : cresyn.sh {带数据的源库名} {无数据的目标库名} {表名}

database_with_data=$1
database_no_data=$2
table=$3

# 连接目标库创建指向源库对应表的同义词
dbaccess ${database_no_data} <<EOF
CREATE SYNONYM ${table} FOR ${database_with_data}:${table};
EOF

执行方式:

sh cresyn.sh gcd001 dde002 tab1
sh cresyn.sh gcd001 dde002 tab2
sh cresyn.sh gcd001 dde002 tab3

批量处理版本

针对3张固定表可直接用批量版本,保存为cresyn_batch.sh:

#!/bin/sh
# USAGE : cresyn_batch.sh {带数据的源库名} {无数据的目标库名}

database_with_data=$1
database_no_data=$2
target_tables="tab1 tab2 tab3"

for table in ${target_tables}
do
  dbaccess ${database_no_data} <<EOF
CREATE SYNONYM ${table} FOR ${database_with_data}:${table};
EOF
done

执行方式:

sh cresyn_batch.sh gcd001 dde002

注意事项

  • 执行脚本的操作系统用户需要具备两个数据库的访问权限,以及目标库的同义词创建权限
  • 如果表存在指定属主,需要将SQL修改为CREATE SYNONYM ${table} FOR ${database_with_data}:${表属主}.${table};
  • 如果需要在源库也创建指向目标库的同义词,只需将SQL中两个数据库的位置互换即可

内容的提问来源于stack exchange,提问作者TenEM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:27:00