查询以检索所提供列名的所有行数据

时间:2016-03-18 20:49:32

标签: sql eclipse oracle-sqldeveloper

我正在使用Eclipse和Oracle SQL Developer。我的联系都已建立。我试图通过将列名称作为变量传递来在SQL Developer中查询我的数据库。

例如,我只想使用与此声明类似的内容:

select * from CUSTOMERS;

但允许CUSTOMERS成为我可以传入任何表名的变量。

目前,这会从给定的列名和连接中提取所有列名:

final String query = "select column_name from all_tab_columns"
    +" where owner = ?"
    +" and table_name = ?";
try {
    headers = DAO.useJNDI(jndi)
        .setSQL(query)
        .input(1, host)
        .input(2, tableName)
        .list(String.class);

我想用行做同样的事情。有谁知道如何做到这一点?这就是我到目前为止所想的:

final String sql = "select *"
    + " from table_name"
    + " where owner = ? and table_name = ?";    
 try {
    logger.debug(tableName+sourceJNDI);
    sourceList = DAO.useJNDI(sourceJNDI)
        .setSQL(sql)
        .input(1,  host)
        .input(2, tableName)
        .list(DatabaseCompareDto.class);

主要关注的是SQL语句。我知道其他一切都有效。

2 个答案:

答案 0 :(得分:0)

如果我正确地阅读了您的问题,我认为您想要的是用SQL替换SQL中的第一个table_name,然后添加一个额外的.input(1,tableName):

 final String sql = "select *"
     + " from ?"
     + " where owner = ? and table_name = ?";    
 try {
     logger.debug(tableName+sourceJNDI);
     sourceList = DAO.useJNDI(sourceJNDI)
         .setSQL(sql)
         .input(1, tableName)
         .input(2, host)
         .input(3, tableName)
         .list(DatabaseCompareDto.class);

答案 1 :(得分:0)

您无法将表名作为参数传递。不要在这种所谓的通用解决方案上浪费精力,而是使用或创建一个小的模板引擎,它允许您在将查询中的表名称发送到数据库之前替换它。