执行
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
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
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
单值
聚合集合也要交 MINUS UNION等等
加上查询要找到关联条件就可以了
思路如下:
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;
/
where substr(b.a,27,1)=a.tableid