【发布时间】:2010-09-14 20:54:52
【问题描述】:
我有一个 Web 应用程序,用户可以在其中输入任意 sql 查询以供以后进行批处理。我们想要验证查询的语法而不实际执行它。有些查询会花费很长时间,这就是我们不想执行它们的原因。我正在使用 Oracle 的 dbms_sql.parse 来执行此操作。
但是,我现在需要知道结果集列的数量和类型。有没有办法在不实际执行查询的情况下做到这一点?也就是说,让 Oracle 解析查询并告诉我在实际执行查询时将返回什么结果数据类型/名称?我使用的是 Oracle 10g,它是一个 Java 1.5/Servlet 2.4 应用程序。
编辑:输入查询的用户已经是数据库上的用户。他们使用他们的数据库凭据对我的应用程序进行身份验证,并使用这些凭据执行查询。因此,他们无法输入任何仅通过连接 sqlplus 无法运行的查询。
【问题讨论】:
-
你让用户输入查询?这听起来非常危险。
-
我赞成! “删除 * FROM ...”!
-
我也投票反对这种做法!应该允许用户输入值,但不能输入代码。
-
哈!我想我不是唯一一个讨厌 SQL*Plus 的人。他们制作了一个网络应用程序来绕过那个令人讨厌的 POS。