我正在尝试使用DBD::Sybase查询Sybase数据库。有人可以澄清使用syb_nsql与准备(...) - 执行(..)调用之间的区别吗?
答案 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等任何高级功能。