繁体   English   中英

数组值并插入ksh

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM