4

我想从 Oracle 数据库模式中检索所有触发器名称。

我使用 getFunctions 来检索所有函数,但我找不到触发器的另一个函数。

DatabaseMetaData dbmd;
ResultSet result = dbmd.getFunctions(null, Ousername, null);
4

4 回答 4

4

您可以使用元数据来做到这一点。

DatabaseMetaData dbmd = dbConnection.getMetaData(); 
ResultSet result = dbmd.getTables("%", Ousername, "%", new String[]{ "TRIGGER" });
while (result.next()) {
     result.getString("TABLE_NAME")
}
于 2015-05-08T18:52:49.710 回答
2

JDBC API 不提供从 DatabaseMetaData 检索触发器信息的标准方法。事实上,“触发器”这个词甚至没有出现在 Javadoc 中。公认的答案可能适用于 Oracle,但没有记录在案,而且它当然不适用于 HSQL 和 PostgreSQL 等其他数据库。

目前,在不发现 JDBC 驱动程序中的一些未记录的后门 hack 的情况下检索触发器信息的唯一方法是发出特定于数据库的查询。

于 2017-10-05T15:10:35.873 回答
0

我找到了另一种通过 PreparedStatement 获取所有触发器的方法:

try {
    System.out.println("\n******* Table Name: "+ tableName);    
    String selectQuery = "SELECT TRIGGER_NAME FROM ALL_TRIGGERS WHERE TABLE_NAME = ?";
    PreparedStatement statement = DataSource.getConnection().prepareStatement(selectQuery); 
    statement.setString(1, tableName.toUpperCase());
    ResultSet result = statement.executeQuery();

    System.out.println("Triggers: ");
    while (result.next()) {
        String triggerName = result.getString("TRIGGER_NAME");
        System.out.println(triggerName);
    }
} catch (SQLException e) {
    e.printStackTrace();
}
于 2019-12-10T13:09:54.457 回答
0

提示 MySQL 用户:如果您想从 MySQL 数据库中检索所有触发器,则 INFORMATION_SCHEMA 中的表 TRIGGERS 包含有关数据库触发器的所有信息:

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS

类似的例程(函数和过程)

SELECT * FROM INFORMATION_SCHEMA.ROUTINES

不幸的是,JDBC 元数据中的触发器并没有得到很好的支持。

于 2020-02-23T09:23:33.423 回答