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値を引用する必要があるかどうかを理解できるように、各フィールドの を見つける必要があるため、配列を作成しました( '')。アレイをこれに「接続」するにはどうすればよいですか? シェルは、配列の最初の値が であることを理解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

Ok?


私は配列が次のようになると思っていました:

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 に答える