如何根据字段里的表名(视图名)查表里(视图)的数据

yingzi107 2010-02-22 11:40:38
把表名或者视图名存于一张表里,如何通过这张表获得相应表或者试图里的数据。

select * from
(select b.table_name from tb_table_model b where m.table_id = 'id01') --获得表名

以上查询得到的结果是表名,而非想要的表里的数据。
...全文
513 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
貓哥是個傳說 2010-02-26
  • 打赏
  • 举报
回复
學了一招不錯。。。。
studying_ 2010-02-25
  • 打赏
  • 举报
回复
使用一下系统表col,如:
desc col;

注意TNAME(表名)和CNAME(字段名)的引用
huangyunzeng2008 2010-02-25
  • 打赏
  • 举报
回复
对,通过动态的sql来做吧
kingkingzhu 2010-02-25
  • 打赏
  • 举报
回复
狂狼说的正确,学习了
YY_MM_DD 2010-02-22
  • 打赏
  • 举报
回复
这样就只有通过动态SQL来实现
inthirties 2010-02-22
  • 打赏
  • 举报
回复
试试带参数的视图
http://blog.csdn.net/inthirties/archive/2010/02/22/5316526.aspx
suiziguo 2010-02-22
  • 打赏
  • 举报
回复
表名作为变量,这个要用动态SQL。
BlueskyWide 2010-02-22
  • 打赏
  • 举报
回复
使用一下系统表col,如:
desc col;

注意TNAME(表名)和CNAME(字段名)的引用。
Jane_64 2010-02-22
  • 打赏
  • 举报
回复
declare @str varchar(2000)
set @str='select * from '
set @str=@str+'(select b.table_name from tb_table_model b where m.table_id = '''id01''')'
exec(@str)
iqlife 2010-02-22
  • 打赏
  • 举报
回复
有,
动态SQL实现的就是这样的功能
yingzi107 2010-02-22
  • 打赏
  • 举报
回复
引用 13 楼 java3344520 的回复:
狂狼说的正确,学习了
对象和字符串的类型区分,就像你执行SQL:SELECT * from emp 可以得到EMP里的数据,但是执行
SQL> SELECT * from 'emp';

SELECT * from 'emp'

ORA-00903: 表名无效


恩.
oracle 有没有相关的转换函数,实现这种转换。
iqlife 2010-02-22
  • 打赏
  • 举报
回复
狂狼说的正确,学习了
对象和字符串的类型区分,就像你执行SQL:SELECT * from emp 可以得到EMP里的数据,但是执行
SQL> SELECT * from 'emp';

SELECT * from 'emp'

ORA-00903: 表名无效
yingzi107 2010-02-22
  • 打赏
  • 举报
回复
引用 11 楼 wildwave 的回复:
这里的子查询相当于一个视图,若干字符串的集合,子查询中获得的表名是一个字符型的值,不能当作对象使用
只能通过动态语句实现


恩.
小灰狼W 2010-02-22
  • 打赏
  • 举报
回复
这里的子查询相当于一个视图,若干字符串的集合,子查询中获得的表名是一个字符型的值,不能当作对象使用
只能通过动态语句实现
yingzi107 2010-02-22
  • 打赏
  • 举报
回复
谢谢各位 持续关注中

我还想知道为什么这种查询方式(如题),只能得到相应的表名或者视图名,而查询不到相应的数据呢。
iqlife 2010-02-22
  • 打赏
  • 举报
回复
declare 
v_tbname varchar2(30);
v_sql varchar2(100);
emp_row emp%rowtype;
begin
select sname into v_tbname from a where a.id=100;
dbms_output.put_line(v_tbname);
v_sql:='select * from '||v_tbname ||' where ROWNUM=1' ;
dbms_output.put_line(v_sql);
execute immediate v_sql into emp_row;
dbms_output.put_line(emp_row.ename||' '||emp_row.SAL||' '||emp_row.JOB);
end;

结果
emp
select * from emp where ROWNUM=1
SMITH 800 CLERK
iqlife 2010-02-22
  • 打赏
  • 举报
回复
动态SQL不能实现?
declare
str varchar2(500);
c_1 varchar2(10);
r_1 emp%rowtype;
begin
c_1:='SCOTT';
str:='select * from emp where ename=:c AND ROWNUM=1';
execute immediate str into r_1 using c_1;
DBMS_OUTPUT.PUT_LINE(R_1.eNAME||' '||R_1.SAL||' '||R_1.DEPTNO);
end ;
输出来EMP的结果
SCOTT 3000 20
学城 2010-02-22
  • 打赏
  • 举报
回复
create proc [dbo].[queryTable]
( @tablename varchar(30))
as
begin
if exists( select * from sysobjects where name = @tablename)
begin
exec (' select * from ' +@tablename)
end
end
楼主,我写了储存过程,传入一个参数(表名),查询该表的数据,您可以修改一下,相信可以
qiyousyc 2010-02-22
  • 打赏
  • 举报
回复
引用 1 楼 jane_64 的回复:
declare @str varchar(2000)
set @str='select * from '
set @str=@str+'(select b.table_name from tb_table_model b where m.table_id = '''id01''')'
exec(@str)

这个执行是不会出结果的。
select是不会出现内容的。
试试动态的sql同样不能出现。
这个貌似很难的问题。

17,134

社区成员

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

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