我有个两张表,一张表为matadata表(table_id,table_name,table_describe),
这张表中table_name字段中存储的是另外一张表的表名,
现在,我知道table_id=002,想查询对应的table_name这个表名对应的那张表的信息,在oracle中该如何写查询语句?以前,我每次先select table_name from matadata where table_id=002,
然后,得到表名假设为apple,然后,再写查询select * from apple;
感觉这样很麻烦,能不能用一个语句写成,或者,其他什么方法,能一步执行完成?非常感谢!

解决方案 »

  1.   

    一条SQL语句不行,需要用动态sql来实现
      

  2.   

    sql里的表名,字段名都需要是静态的,sql是不能直接支持的,需要用execute immediate 'sql'; 这样的动态sql的执行方式。declare
    v_tablename varchar2(1000);
    begin
    select tablename into v_tablename from matadata where table_id = '002';
    execute immediate 'select * from '||v_tablename;
    end;
    /
      

  3.   


    建一个有返回游标类型的存储过程java中处理这种结果集public static void dealWithCursor() throws Exception {
    Connection connection = getConnection();
    CallableStatement callableStatement = connection
    .prepareCall("{call GetResultCur(?) }");
    callableStatement.registerOutParameter(1,
    oracle.jdbc.driver.OracleTypes.CURSOR);
    callableStatement.execute();
    OracleCallableStatement oracleCallableStatement = (OracleCallableStatement) callableStatement;
    ResultSet resultSet = oracleCallableStatement.getCursor(1);
    while (resultSet.next()) {
    System.out.println(resultSet.getString(1));
    System.out.println(resultSet.getString(2));
    System.out.println(resultSet.getString(3));
    }
    connection.close();
    }
      

  4.   

    对象(表名、字段名等)作为变量,需要用动态的sql语句