sql - 有没有办法在不执行未知数据库查询的情况下获取类型/名称?

标签 sql database oracle plsql

我有一个 Web 应用程序,用户可以在其中输入任意 sql 查询以供以后进行批处理。我们希望在不实际执行查询的情况下验证查询的语法。有些查询会花费很长时间,这就是我们不想执行它们的原因。我正在使用 Oracle 的 dbms_sql.parse 来执行此操作。

但是,我现在遇到一种情况,我需要知道结果集列的数量和类型。有没有办法在不实际执行查询的情况下执行此操作?也就是说,让 Oracle 解析查询并告诉我在实际执行查询时将返回什么结果数据类型/名称?我正在使用 Oracle 10g,它是一个 Java 1.5/Servlet 2.4 应用程序。

编辑:输入查询的用户已经是数据库中的用户。他们使用他们的数据库凭据对我的应用程序进行身份验证,并使用这些凭据执行查询。因此,他们无法通过仅与 sqlplus 连接来输入无法运行的任何查询。

最佳答案

您应该能够准备 SQL 查询来验证语法并获取结果集元数据。准备查询不应执行它。

import java.sql.*;
. . .
Connection conn;
. . .
PreparedStatement ps = conn.prepareStatement("SELECT * FROM foo");
ResultSetMetadata rsmd = ps.getMetaData();
int numberOfColumns = rsmd.getColumnCount();

然后您可以获得有关结果集每一列的元数据。

关于sql - 有没有办法在不执行未知数据库查询的情况下获取类型/名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/163389/

相关文章:

oracle - 如何从 Oracle Job Scheduler 停止或删除作业

MySQL LEFT OUTER JOIN 与 LIMIT?

sql - 邮政编码 : SELECT : Query for number of rows which EXIST BETWEEN given range

PHP 搜索查询不工作

database - 在 PLSQL 的条件语句中使用查询?

c# - 在依赖 Oracle 的 Windows 启动时自动启动 Windows 服务

sql - 使用 SQL 查找重症监护婴儿的数量

mysql - 如何处理具有多种不同上下文的多种语言的翻译?

mysql - 使用mysql中的触发器将一个数据库的值复制到另一个数据库

mysql - 为什么 SQL 中的 NULL 不能与 NULL 匹配?