[英]How to get a custom Oracle function parameter definition
我们需要从 Java jdbc 中获取自定义 Function 参数列表。
我们在名为mypkg 的 package 中定义自定义 function 。
我使用 oracle 作为数据库。
我们可以在控制台中运行类似desc mypkg.customFunction的命令。
但我想知道如何从 java 方面获得类似的信息。
如果您有存储的 function(而不是存储过程),则getFunctionColumns方法将检索其参数的详细信息。
考虑以下代码(使用try-with-resources )。
请注意,Oracle 的 JDBC 驱动程序中似乎存在一个 错误,其中 getFunctionColumns 方法getFunctionColumns
检索相同的参数。 下面的代码将只显示每个参数的详细信息一次。
代码后有更多解释。
String url = "jdbc:oracle...";
try (Connection conn = DriverManager.getConnection(url)) {
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs = dbmd.getFunctionColumns("mypkg", "<schema>", "customFunction", "%");
String lastColumn = null;
while (rs.next()) {
String columnName = rs.getString(4);
if (columnName != null && !columnName.equals(lastColumn)) {
String type;
switch (rs.getShort(5)) { // parameter type (IN, OUT or IN-OUT)
case DatabaseMetaData.functionColumnIn:
type = "IN";
break;
case DatabaseMetaData.functionColumnInOut:
type = "IN OUT";
break;
case DatabaseMetaData.functionColumnOut:
type = "OUT";
break;
default:
type = "unknown";
}
System.out.printf("%s %s %s%n",
rs.getString(4), // parameter name
type, // parameter type
rs.getString(7)); // data type length
lastColumn = columnName;
}
}
}
catch (SQLException xSql) {
xSql.printStackTrace();
}
getFunctionColumns
名称。getFunctionColumns
的第二个参数是模式。 将上述代码中的<schema>
替换为mypkg
所有者的实际模式名称。 如果您不知道架构,那么您可以使用 null。 getFunctionColumns
方法返回的ResultSet
的第 2 列包含架构名称。customFunction
是存储过程(而不是存储函数),那么您需要方法getProcedureColumns
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.