我可能没说清楚,一次只查一张表,表名是以参数的方式输入的,也就是说如果参数是table1,则sql可能是select table1.* from talbe1,如果是talbe2,则为select table2.* from talbe2,现在需要不显示所有字段,而是除id以外其他字段。
谢谢:ashzs((可以包含中文字符)) 和 yxxx(小孬)的回答,请继续关注
就是,你不选不就行了 select * from table1 查询表table1中所有的字段select name from table1 查询表table1中的字段name是这个意思吗select t1.name,t2.age,t2.memo from table1 t1,table2 t2 where t1.id=t2.id
CREATE OR REPLACE FUNCTION ZHOUXY.GETFIELDNAME(tablename in varchar2) RETURN varchar is iLoop number; fieldname varchar2(1000); fieldname_cur varchar2(30); CURSOR cur_field is SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS WHERE TABLE_NAME = UPPER(tablename) AND COLUMN_NAME <> 'ID';BEGIN open cur_field; iLoop := 0; loop fetch cur_field into fieldname_cur; exit when cur_field%notfound; iLoop := iLoop + 1; if iLoop > 1 then fieldname := fieldname || ',' || fieldname_cur; else fieldname := fieldname_cur; end if;end loop; close cur_field; return fieldname;END; /
CREATE OR REPLACE procedure ZHOUXY.GETFIELDNAME(tablename in varchar2) RETURN varchar is fieldname varchar2(1000); CURSOR mycur is SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS WHERE TABLE_NAME = UPPER(tablename) AND COLUMN_NAME <> 'ID';BEGIN for mytemp in mycur loop colname := colname||mytemp.column_name||','; end loop; colname := substr(colname,0,length(colname)-1); --exec 'select '||colname||' from aaa;';想直接用过程选出数据,那这句该怎么写才对? END; /
select * from col where tname=upper('abc'); distinct一下不就是了, 你看这个启发行不行
汗,那你给每个表建个视图好了…………
RETURN varchar is
iLoop number;
fieldname varchar2(1000);
fieldname_cur varchar2(30);
CURSOR cur_field is
SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS
WHERE TABLE_NAME = UPPER(tablename)
AND COLUMN_NAME <> 'ID';BEGIN
open cur_field;
iLoop := 0;
loop
fetch cur_field into fieldname_cur;
exit when cur_field%notfound; iLoop := iLoop + 1; if iLoop > 1 then fieldname := fieldname || ',' || fieldname_cur;
else fieldname := fieldname_cur;
end if;end loop;
close cur_field;
return fieldname;END;
/
RETURN varchar is
fieldname varchar2(1000);
CURSOR mycur is
SELECT COLUMN_NAME FROM SYS.USER_TAB_COLS
WHERE TABLE_NAME = UPPER(tablename)
AND COLUMN_NAME <> 'ID';BEGIN
for mytemp in mycur loop
colname := colname||mytemp.column_name||',';
end loop;
colname := substr(colname,0,length(colname)-1);
--exec 'select '||colname||' from aaa;';想直接用过程选出数据,那这句该怎么写才对?
END;
/
distinct一下不就是了,
你看这个启发行不行
我写的是取出所有的字段名称,
你可以把这个结果用在直接的程序中。或者使用游标。一样可以完成。但是就需要修改当前的函数,使用存储过程,返回游标。