[英]Array values and insert in ksh
我有一个数组,该数组返回从文件读取的表的data_type
。 例如:
filed1 VARCHAR2
filed2 INTEGER
等等
现在,我必须在同一张表中进行insert
以进行备份。 这个过程是动态的,所以我想到了:
ENDROW=""
while read ENDROW;
do
tmp=${ENDROW##*@#;}
field1=`printf "%s\n" "${tmp%%@#;*}"`
tmp=${ENDROW##*@#;}
field2=`printf "%s\n" "${tmp%%@#;*}"`
*and here the insert in the table*
done
我创建数组是因为我需要它来查找每个字段的data_type
,因此我可以理解值是否需要用引号( ''
)引用。 如何将阵列“连接”到此? 外壳程序将能够理解该数组的第一个值是VARCHAR2
并在insert
中用''
引起引用。
哦,现在我明白了。谢谢! 但是..如果我的数组是这样的:
field1 VARCHAR2
field2 NUMBER
field3 VARCHAR2
field4 DATE
field5 TIMESTAMP(6)
field6 DATE
field7 DATE
field8 CHAR
该函数将是:
function format {
case "${typeof[$1]}" in
VARCHAR2) printf '"%s"\n' "$2" ;;
NUMBER) printf "%d\n" "$2" ;;
DATE) printf "%d\n" "$2" ;;
CHAR) printf "%d\n" "$2" ;;
*) print -u2 "don't know about field '$1'" ;;
esac
}
?
我会做这样的事情-我假设您有一个名为typeof
的数组,该数组将字段名称映射到数据类型:
function format {
case "${typeof[$1]}" in
VARCHAR2) printf '"%s"\n' "$2" ;;
INTEGER) printf "%d\n" "$2" ;;
*) print -u2 "don't know about field '$1'" ;;
esac
}
while read ENDROW;
do
tmp=${ENDROW##*@#;}
field1=$( format field1 "${tmp%%@#;*}" )
tmp=${ENDROW##*@#;}
field2=$( format field2 "${tmp%%@#;*}" )
# and here the insert in the table
done
好吧,首先,我用线轴进行选择以提取我需要的东西。 然后,我以这种方式从后台打印程序创建的文件中创建数组:
i=0
while read str
do
arr[$((i=i+1))]=$str
done < ${file}
该数组包含:
field1 VARCHAR2
field2 NUMBER
field3 VARCHAR2
field4 DATE
field5 TIMESTAMP(6)
field6 DATE
field7 DATE
field8 CHAR
好?
我以为该数组将是:
arr[field1]="VARCHAR2"
arr[field2]="NUMBER"
arr[field3]="VARCHAR2"
arr[field4]="DATE"
arr[field5]="TIMESTAMP(6)"
arr[field6]="DATE"
arr[field7]="DATE"
arr[field8]="CHAR"
这是一个关联数组,使用字符串而不是整数作为索引。 你会做
typeset -A arr
while read key value; do
arr[$key]=$value
done < ${file}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.