SQL求助: 在写SQL语句时,我想要调用其他表查询的结果拼接上一个字符串作为表名,但是执行语句时, 20
报错说我查的字段不在表中(标识符无效)。selectLYO_3_DB5_DBD84from(selecttable_namefromUSER_TABLESwhereTAB...
报错说我查的字段不在表中(标识符无效)。
select LYO_3_DB5_DBD84 from (select table_name from USER_TABLES where TABLE_NAME = (SELECT * FROM(SELECT concat(demo,'HISTORY') FROM HISTORY order by recordtime)where rownum=1));
表名为一个查询的结果:A1_LJ_HISDATA_LYO_3_HISTORY ,这个也是在数据库中存在的表,我搜索的字段也是该表存在的。
想知道为什么表名为查询结果后就不能正常执行查询操作了呢?应该怎么处理才能实现拼接后的字符串作为表名正常查询。
PS:因为表名不确定,所以想通过查询其他表的某一字段来拼接字符串凑成表名,然后查询想要的字段结果。 展开
select LYO_3_DB5_DBD84 from (select table_name from USER_TABLES where TABLE_NAME = (SELECT * FROM(SELECT concat(demo,'HISTORY') FROM HISTORY order by recordtime)where rownum=1));
表名为一个查询的结果:A1_LJ_HISDATA_LYO_3_HISTORY ,这个也是在数据库中存在的表,我搜索的字段也是该表存在的。
想知道为什么表名为查询结果后就不能正常执行查询操作了呢?应该怎么处理才能实现拼接后的字符串作为表名正常查询。
PS:因为表名不确定,所以想通过查询其他表的某一字段来拼接字符串凑成表名,然后查询想要的字段结果。 展开
1个回答
展开全部
declare
v_tbl_nm varchar2(30);
v_sql varchar2(4000);
v_result varchar2(4000);
begin
select table_name into v_tbl_nm from USER_TABLES where TABLE_NAME = (SELECT * FROM(SELECT concat(demo,'HISTORY') FROM HISTORY order by recordtime)where rownum=1);
v_sql :='select LYO_3_DB5_DBD84 from ' || v_tbl_nm ;
execute immediate v_sql into v_result;
dbms_output.put_line(v_result);
end;
v_tbl_nm varchar2(30);
v_sql varchar2(4000);
v_result varchar2(4000);
begin
select table_name into v_tbl_nm from USER_TABLES where TABLE_NAME = (SELECT * FROM(SELECT concat(demo,'HISTORY') FROM HISTORY order by recordtime)where rownum=1);
v_sql :='select LYO_3_DB5_DBD84 from ' || v_tbl_nm ;
execute immediate v_sql into v_result;
dbms_output.put_line(v_result);
end;
追问
只能通过存储过程实现吗? 查询结果为何不可用作表名直接用呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询