我正在使用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语句。我知道其他一切都有效。
答案 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)
您无法将表名作为参数传递。不要在这种所谓的通用解决方案上浪费精力,而是使用或创建一个小的模板引擎,它允许您在将查询中的表名称发送到数据库之前替换它。