syb_nsql vs在Perl中执行调用

时间:2010-10-23 02:22:02

标签: perl sybase dbi

我正在尝试使用DBD::Sybase查询Sybase数据库。有人可以澄清使用syb_nsql与准备(...) - 执行(..)调用之间的区别吗?

1 个答案:

答案 0 :(得分:0)

syb_nsql(作为Sybase::DBlib's nsql的直接端口,它是一个相当高级别的包装器)支持所有nsql的高级功能,DBD :: Sybase的prepare-execute没有(IIRC)具有本机,并且您拥有自己编写包装器代码(基本上,你几乎不得不重新实现自己的nsql版本):

  • MaxRows功能限制返回的行数以节省内存使用

  • 可选的死锁重试逻辑

  • 错误检查(使用其配套错误和消息处理程序 - 我不记得DBD :: Sybase有消息处理程序)

  • 以及返回值格式的几个选项。

  • 此外,数据可以批量返回给调用者(因此不需要为fetch_arrayref等编写自己的循环...),或者通过作为参数传递的回调子例程逐行处理(此功能类似于r_sql()方法)。

考虑到nsql实际上是使用prepare / execute / fetchrow_arrayref实现的;它与您直接使用的任何常规准备执行功能几乎没有任何功能差异。它似乎甚至根据代码注释支持占位符,尽管它似乎没有记录。

不同之处在于,nsql允许您避免滚动自己的包装器代码以支持上面列出的死锁重试或MaxRows等任何高级功能。