我已经使用SQL几年了,主要是MySQL/PhpMyAdmin,最近还使用了Oracle/iSqlPlus和PL/SQL.我已用PHP,Java,ActionScript等编程.我意识到SQL不是像其他语言那样的命令式编程语言 - 但为什么错误消息在SQL中看起来不太具体?在其他环境中,我直接指出了问题的根源.更常见的情况是,MySQL给了我错误,如"错误AROUND where u.id = ..."并打印整个查询.对于存储过程来说,这更加困难,因为调试可能是一场彻底的噩梦.
我错过了一个神奇的工具/语言/插件/设置,可以提供更好的错误报告,还是我们坚持这个?我想要一个调试器或语言,它在设置断点和踩过代码时给了我与Eclipse相同的控制权.这可能吗?
我认为答案在于SQL是一种基于集合的语言,附带了一些程序性的东西.由于设计师正在考虑基于集合的术语,他们并不认为其他语言的普通调试类型很重要.但是,我认为其中一些正在改变.您可以在SQL Server 2008中设置断点.我没有真正使用它,因为您必须拥有SQL Server 2008数据库才能工作,而我们的大多数仍然是SQL Server 2000.但它可用,它确实允许您单步执行的东西.当select语句长度为150行时,你仍然会遇到问题,并且它知道语法不正确但它无法准确指出所有命令的确切位置.
就个人而言,当我编写一个长程序SP时,我构建了一个测试模式,其中包括向我展示我所做的事情的结果,在我感兴趣的特定点上的关键变量的值,以及让我知道哪些步骤的打印状态已经完成,然后完成后将整个事情卷回来.这样我可以看到如果它运行真实会发生什么,但如果我弄错了,就不会伤害数据库中的任何数据.我发现这非常有用.它可以大大增加你的proc的大小.我有一个我使用的模板,其中包含我需要设置的大部分结构,所以它并不需要我太长时间.特别是因为我从不添加插入物.更新或删除到proc而不先测试相关的选择,以确保我有我想要的记录.