javaを使用してDB内のすべての関数とプロシージャを削除しようとしています。 私の現在のコードはそうのようなものです:アイテムは一度、「機能」とかつて「手順」であるgetProceduresとgetFunctionsが同じResultSetを返す
Class.forName(driver);
Connection conn = getConnectionToDB();
String itemName;
ResultSet rs = getResultSetForItem(item);
String upperCaseItem = item.toUpperCase();
while (rs.next()) {
itemName = rs.getString(upperCaseItem + "_NAME");
// Procedure and function names come with a grouping ID, remove it
if (item.equals("procedure") || item.equals("function"))
itemName = itemName.substring(0, itemName.indexOf(";"));
stmt = conn.createStatement();
stmt.executeUpdate(query + " " + itemName);
}
。また、クエリ変数は、実行ごとに「DROP FUNCTION」または「DROP PROCEDURE」に正しく設定されています。
getResuletSetForItemの方法
: Class.forName(driver);
Connection conn = getConnectionToDB();
DatabaseMetaData md = conn.getMetaData();
switch (item.toLowerCase()){
case "function":
rs = md.getFunctions("LDMS", "dbo", "%");
break;
case "procedure":
rs = md.getProcedures("LDMS", "dbo", "%");
break;
}
return rs;
何が起こることはあるが、私は私が求めていたものに従って関数やプロシージャなどの結果セットを取得します。しかし、それはまた、他の種類のレコードを返します(私が関数のResultSetを要求した場合、手順も同様に取得します)。
もちろん、Xが実際にストアドプロシージャである「DROP FUNCTION X」を実行しようとすると、例外が発生します。