Dynamical array reallocation for multidimensional arrays

Fortran allows dynamical array reallocation as follows:

integer, allocatable :: data1d(:)

allocate(data1d(0))
data1d = [data1d, 6]
data1d = [data1d, 2]

Now data1d = [6, 2]. Is something similar possible for multidimensional arrays? I would like to use something like:

integer, allocatable :: data2d(:,:)

allocate(data2d(3,0))
data2d = [data2d, [1,2,3]]
data2d = [data2d, [6,7,8]]

It's of course possible to allocate a temporary array, copy the original array, deallocate original array and allocate it again with new size, copy temporary array to original array and then add the new data to the enlarged array. But that's quite cumbersome.