让Perl DBI返回的记录按列存贮

    最新版本的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在取回时进行了从列到行的转换, 我们在绑定时又进行了从行到列的转换, 有点多此一举啊, 影响效率.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • Do you have glue? I need some here.
  • 你有胶水吗? 我这里需要一点.
  • I have some left.
  • 我剩下一些.
  • If you have more, please give me some.
  • 如果你有多的, 请给我.
  • Do you have my pencil?
  • 你拿了我的铅笔吗?
  • Yes, I have your eraser, too.
  • 是的, 我还拿了你的橡皮.