Используя VTL Velocity, как я могу создать массив VALUES для использования в выражении SQL - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь создать инструкцию SQL в моем распознавателе AWS, который использует значения.

Например:

#set( $inserts = [] )
#foreach ( $item in $ctx.args.input.listItems)
        $util.qr($inserts.add( ['$item.item_id', '$item.item_name', 'item.item_image_id'] ))
#end

И мой оператор SQL:

#set( $sql = "INSERT INTO items (item_id, item_name, item_image_id) VALUES $inserts" )

Однако это не работает. У меня есть другой способ создать этот тип оператора SQL? Спасибо

1 Ответ

0 голосов
/ 10 января 2019

Я бы сделал так:

#set( $sql = "INSERT INTO items (item_id, item_name, item_image_id) VALUES " )
#foreach ( $item in $ctx.args.input.listItems)
    #set( $sql = $sql + "($item.item_id, $item.item_name, $item.item_image_id)")
    #if( $foreach.hasNext )
        #set( $sql = $sql + ", ")
    #else
        #set( $sql = $sql + ";")
    #end
#end
$sql

Это решение работает на вас?

Учитывая $ctx как

{
    ctx: {
        args: {
            input: {
                listItems: [
                    {
                        item_id: "itemId1",
                        item_name: "itemName1",
                        item_image_id: "itemImageId1"

                    },
                    {
                        item_id: "itemId2",
                        item_name: "itemName2",
                        item_image_id: "itemImageId2"

                    }
                ]
            }
        }
    }
}

выход равен INSERT INTO items (item_id, item_name, item_image_id) VALUES (itemId1, itemName1, itemImageId1), (itemId2, itemName2, itemImageId2);.

...