this is an idea of the structure to get the data with pcl.
note for a single element it has quite a lot of work to do so if called in a big loop one element at a time it is inefficient. However your process can probably be worked with multiple elements/regions etc to minimise the db calls and have fewer larger ones. Or maybe process all laminate data to temporary store the data and then release the storage when you've finished.
best regards
Arthur
db_get_region_for_elements
db_get_region_definition
db_get_material
$ if it is a laminate composite get all the layer materials
db_get_matl_prop_value_count
$ size arrays: material word ids,values,fieldids,fieldnames
db_get_matl_prop_value
$ loop over material word ids to find "number of plies" id
$ get number of plies from the corresponding material word values
$ size arrays for ply materials,thicknesses,orientations
how you will create the input and use the data will to some extent govern how you would write this. Also the limits on the type of data you want to handle will also give things you must check e.g. your example has a unique material id (24) used for every laminate ply material - layers 1 to 9. In reality each layer could be a different material so how would you handle this.
In the attached I took some code I had for a similar type of query and quickly modified it to do the type of thing you were asking for. Hopefully it will give you some insight to what is required. This handles multiple ply materials.