为啥存储函数中不允许使用动态 SQL?

Posted

技术标签:

【中文标题】为啥存储函数中不允许使用动态 SQL?【英文标题】:Why is dynamic SQL not allowed in stored functions?为什么存储函数中不允许使用动态 SQL? 【发布时间】:2017-01-24 23:38:59 【问题描述】:

关于 SO 和网络上其他地方的线程有很多关于 Dynamic SQL not allowed in stored functions or triggers 错误消息的问题。我明白了:不允许,没有解决方法,没有解决方案 - 迷路了。

我感兴趣的是这个原因。为什么不允许?

【问题讨论】:

【参考方案1】:

因为局部变量仅在存储程序执行期间才在作用域内,所以在存储程序中创建的准备好的语句中不允许引用它们。

Prepared statement 作用域是当前会话,而不是存储的程序,所以语句可以在程序结束后执行,此时变量将不再在作用域内。

【讨论】:

以上是关于为啥存储函数中不允许使用动态 SQL?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 说:#1422 - 存储函数或触发器中不允许显式或隐式提交

MySQL #1422 存储函数或触发器中不允许显式或隐式提交

为啥我们不能在 SQL Server 中的函数内执行存储过程

为啥在 RegisterController 中创建函数在 laravel 中不起作用

SQL Server中Pivot()函数实现动态行转列

datepart 函数在 sql azure 中不起作用