oracle EXECUTE IMMEDIATE 一直报错(ORA-00900)

Oracle EXECUTE IMMEDIATE 中发生 ORA009 00 错误? 只是SQL写错了! 可能是关键字和表名错误,或者符号不匹配。
动态绑定变量时要注意,数量和类型一定要正确。
语法规则必须遵守,权限不够的话就不行。
不要乱用保留字,正确使用特殊字符。
先检查SQL,然后尝试静态执行看看错误在哪里。
调试日志可以提供帮助。
你必须阅读官方文档。

静态SQL和动态SQL的区别和测试实例

你好,跟大家聊聊SQL:我以前在一家做ERP系统的公司工作。
那时,我每天都在与数据库打交道,静态 SQL 和动态 SQL 的概念非常混乱。

我记得在杭州的一个冬天,我们团队接受了一份工作。
客户要求系统能够根据用户输入的任意字段名和表名执行查询。
得了吧,你必须使用动态SQL。
为什么?想想看,你无法提前知道用户将输入什么表名和字段名。
此时您无法使用静态 SQL。
你必须提前写好SQL。
这不是世界末日吗?如果用户想要检查单个表或字段,系统会立即崩溃。

当时我们用PL/SQL来编写。
要编写动态 SQL,我们必须使用 EXECUTE IMMEDIATE 之类的东西。
它们通过连接字符串将用户输入转换为 SQL 语句,然后直接执行。
但这件事的风险是相当大的。
如果用户进行随机输入(例如 DROP TABLE 等),那么系统就会面临风险。
因此,我们需要添加各种过滤器来防止SQL注入。
当时真的很难,调试了好几天。

但是,如果你的表名和字段名是固定的,最好使用静态SQL以避免麻烦。
我记得曾经有一个小函数可以检查三个固定字段。
我们直接使用静态SQL,并在编译时解析SQL。
跑得很快。
与动态SQL不同,它需要等待用户输入才进行编译,这需要花费大量时间。

所以这要看情况。
如果不知道用户想做什么,就只能使用动态SQL。
如果您知道用户定期执行这些操作,则静态 SQL 更可靠。
这是我这十年来的经历。