【发布时间】:2014-10-23 13:17:35
【问题描述】:
我想访问一些存储过程的源代码,这些存储过程存储在 Sybase ASE 15.7 数据库中。 目前,我将文本手动复制到文本文件中,并通过磁盘中执行的 java 代码读取它。
现在我的目标是改进这个过程:我将在我执行的 java 代码中直接从数据库中获取源代码。 那可能吗? 抱歉,我不知道。
我有 Rapid SQL 来处理数据库。
【问题讨论】:
我想访问一些存储过程的源代码,这些存储过程存储在 Sybase ASE 15.7 数据库中。 目前,我将文本手动复制到文本文件中,并通过磁盘中执行的 java 代码读取它。
现在我的目标是改进这个过程:我将在我执行的 java 代码中直接从数据库中获取源代码。 那可能吗? 抱歉,我不知道。
我有 Rapid SQL 来处理数据库。
【问题讨论】:
您可以运行调用存储过程 sp_helptext 的 ISQL 脚本来获取存储过程的代码。希望这会有所帮助。
【讨论】:
getMoreResults() 和getResultSet 方法后,我仍然无法访问我需要的结果集。我找到了另一个解决方案(请参阅我的答案)。
Vince 的提示是使用存储过程 sp_helptext。这个存储过程产生了不止一个结果集,给我带来了困难。
RobV 的回答是使用存储过程 sp_showtext。这似乎是更好的解决方案,因为它只返回一个结果集。但我用 jdbc 尝试过,它曾经抛出一个 sql 异常(“必须返回一个结果集”)。
在我失败后,我找到了另一个解决方案,该解决方案只需要执行一个 select 语句即可。这对我有用!代码如下:
StringBuffer sbSP = new StringBuffer();
String query = "select c.text "
+"from syscomments c, sysobjects o "
+"where o.id=c.id and o.name='"+spName+"' order by c.colid";
PreparedStatement stmt = connection.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
//loop over every row of the stored procedure
sbSP.append(rs.getString("text") + "\n");
}
【讨论】:
最好使用 sp_showtext;它提供了比 sp_helptext 更好的格式化结果(没有损坏的 SQL 行)
【讨论】: