执行
select info from tabA 
结果是:
tablename(table1) tableid(1)根据上一个结果得到table名字和pk然后执行:
select * from table1 where tableid = 1;怎么把这两个sql合并到一起写呢?返回结果
tabA.info table1.*即:
tabAinfo(字段)
tablename(table1) tableid(1)
table1(表)
tableid(字段) filed1(字段)  filed2(字段)
1                 1               1
返回结果
tablename(table1) tableid(1) 1 1 1 

解决方案 »

  1.   

    要看你这表的关联情况,如果info字段还会有这样的情况tablename(table2),那就比较复杂了。我现在给你个不考虑tablename的情况只考虑tableid()里面变化的情况。如果需要明早再回。
    SQL> select * from taba;INFO
    --------------------------------------------------------------------------------
    tablename(table1) tableid(1)SQL> select * from table1;   TABLEID     FILED1     FILED2
    ---------- ---------- ----------
             1          1          1
             2          3          5
             6          3          4SQL> 
    SQL> select a.info, b.tableid, b.filed1, b.filed2
      2    from taba a, table1 b
      3   where substr(info,
      4                instr(info, '(', 1, 2) + 1,
      5                (instr(info, ')', 1, 2) - instr(info, '(', 1, 2) - 1)) =
      6         b.tableid
      7  ;INFO                                                                                TABLEID     FILED1     FILED2
    -------------------------------------------------------------------------------- ---------- ---------- ----------
    tablename(table1) tableid(1)                                                              1          1          1
      

  2.   

    select concat(concat(concat(a.info,b.tableid),b.field1),b.field2) from taba a,table 1;
      

  3.   

    多了解一下ORACLE中的函数吧
    单值
    聚合集合也要交 MINUS UNION等等
      

  4.   

    用concat函数或||可以把字符串接连起来
    加上查询要找到关联条件就可以了
      

  5.   

    单纯的sql无法提供通用解决办法,只能通过plsql,并使用execute immediate解决:
    思路如下:
    CREATE TABLE taba (info VARCHAR2(100));
    INSERT INTO taba VALUES('tablename(table1) tableid(1)');
    INSERT INTO taba VALUES('tablename(table11) tableid(1)');
    DROP TABLE table1;
    CREATE TABLE table1 ( tableid INT,filed1 INT ,filed2 INT);
    INSERT INTO table1 VALUES(1,1,1);
    CREATE TABLE table11 ( tableid INT,filed1 INT ,filed2 INT);
    INSERT INTO table1 VALUES(2,2,2);
    DECLARE
     v_info VARCHAR2(100);
    BEGIN
      FOR i IN (SELECT info,SUBSTR(INFO,
                  INSTR(INFO, 'tablename(') + LENGTH('tablename('),
                  INSTR(INFO, ')', 1) - INSTR(INFO, '(', 1) - 1) tname FROM taba) LOOP
        v_info:=i.info;
        --得到表名和列名
        --通过表名查询user_tab_columns获取所有的列名
        --拼接sql,通过execute immediate执行sql
        --输出执行结果
      END LOOP;
    END;
    /
      

  6.   

    这觉的你这样写不行,lz的select info from tabA 查询的结果是未知的,而你上面的sql直接将table 1给写死了
      

  7.   

    select b.a,a.tableid,a.filed1,a.filed2 from table1 a,taba b
    where substr(b.a,27,1)=a.tableid