最新版本的Perl DBI接口定义了Array DML接口, 指将一个数组作为一个绑定变量, 这个在数据库的接口层上是早已经支持的了, 象Oracle Pro*C中早就支持命名用数组了. 但在实际使用中, 去发现一点不方便的地方. 通常Perl中返回结果集是按行排列的, 如下所示:
{
ROW1 {col1, col2, col3, col4},
ROW2 {col1, col2, col3, col4},
.....
ROWn {col1, col2, col3, col4}
}
但实际上在绑定时, 是这样的:
$sth->bind_param_array( COL1={row1, row2, ... rown});
$sth->bind_param_array( COL2={row1, row2, ... rown});
.....
$sth->bind_param_array( COLn={row1, row2, ... rown});
因此需要转换, 但其实数据库底层(象OCI)使用Array Fetch时传回来的方式是按列存贮的, 如下所示:
COL1={ROW1, ROW2, ..., ROWn}
COL2={ROW1, ROW2, ..., ROWn}
......
COLn={ROW1, ROW2, ..., ROWn}
在很多时侯, Perl在取回时进行了从列到行的转换, 我们在绑定时又进行了从行到列的转换, 有点多此一举啊, 影响效率.