1

我有一个数组,它返回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每个字段的值,这样我就可以了解是否需要引用 ( '') 值。我怎样才能将阵列“连接”到这个?shell 将能够理解数组的第一个值是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
}

?

4

2 回答 2

1

我会做这样的事情——我假设你有一个名为的数组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
于 2013-05-30T10:54:19.597 回答
0

好吧,首先我用线轴进行了选择,以提取我需要的东西。然后我以这种方式从从线轴创建的文件中创建了数组:

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}
于 2013-05-30T13:36:58.990 回答