急求 ORacle动态SQL 查询结果字段为另一查询结果集合

Dimons 2009-11-09 03:02:52
create table a(p0 varchar2(20), p1 varchar2(20), p2 varchar2(20));

insert into a values ('lili', 'lilei', 'mary');



create table b(name varchar2(20));

insert into b values ('p1');

insert into b values ('p2');



--结果为p2,然后要关联a表,显示a表p2字段值

select * from b where b.name = 'p2';
...全文
603 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
先做下来;
Dimons 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cosio 的回复:]
这个没有问题,
首先列转行,然后在把它作为a表的列,!
[/Quote]

不存在行列装换问题 ,没问题贴 SQL 我解决就结贴
cosio 2009-11-09
  • 打赏
  • 举报
回复
这个没有问题,
首先列转行,然后在把它作为a表的列,!
小灰狼W 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dimons 的回复:]
如:
1.
select * from b where b.name = 'p2'; 
b的结果是P2
那么A的查询语句为 select p2 from a

2.
select * from b
b的结果是P2,p1
那么A的查询语句为 select p2,p1 from a

总之A的查询结果为更具B的查询结果动态生成


[/Quote]
过程改成

create or replace procedure proc(tname in varchar2,cname in varchar2 default null)
as
sqlstr varchar2(2000):='create or replace view vtemp as select ';
begin
if cname is not null then
execute immediate sqlstr||cname||' from '||tname;
else

for cur in (select colname from b where tabname=tname)
loop
sqlstr:=sqlstr||cur.colname||',';
end loop;
execute immediate rtrim(sqlstr,',')||' from '||tname;
end if;
end proc;

传入参数表名和字段名,其中字段名为可选参数
输入字段名时字段间用逗号隔开
小灰狼W 2009-11-09
  • 打赏
  • 举报
回复
不能这么写
可以写个过程来判断
将要显示的字段名和表名存在b表中
如下

create or replace procedure proc(tname in varchar2)
as
sqlstr varchar2(2000):='create or replace view vtemp as select ';
begin
for cur in (select colname from b where tabname=tname)
loop
sqlstr:=sqlstr||cur.colname||',';
end loop;
execute immediate rtrim(sqlstr,',')||' from '||tname;
end proc;

SQL> execute proc('a');

PL/SQL procedure successfully completed

SQL> select * from vtemp;

P1 P2
-------------------- --------------------
lilei mary

SQL>
Dimons 2009-11-09
  • 打赏
  • 举报
回复
如:
1.
select * from b where b.name = 'p2';
b的结果是P2
那么A的查询语句为 select p2 from a

2.
select * from b
b的结果是P2,p1
那么A的查询语句为 select p2,p1 from a

总之A的查询结果为更具B的查询结果动态生成

Dimons 2009-11-09
  • 打赏
  • 举报
回复
不知道A表要查那个字段,A表的查询字段根据select * from b where b.name = 'p2';的结果同态生成
cosio 2009-11-09
  • 打赏
  • 举报
回复
这表没有逻辑性,怎么关联?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧