select t1.name,t2.age,t2.memo from table1 t1,table2 t2 where .....

解决方案 »

  1.   

    我可能没说清楚,一次只查一张表,表名是以参数的方式输入的,也就是说如果参数是table1,则sql可能是select table1.* from talbe1,如果是talbe2,则为select table2.* from talbe2,现在需要不显示所有字段,而是除id以外其他字段。
      

  2.   

    谢谢:ashzs((可以包含中文字符)) 和 yxxx(小孬)的回答,请继续关注
      

  3.   

    就是,你不选不就行了   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
      

  4.   

    楼主的意思是自动判断是否存在字段名相同吧,可以通过数据字典和动态SQL实现。其实没必要偷懒,象楼上那些写法很好。
      

  5.   

    hsj20041004(光芒) :不能这样,首先只查一张表,其次任何表的显示字段可能是不同的(除了都有id外)。
      

  6.   

    你要一条sql还是在存储过程中写的?
      

  7.   

    ORARichard(没钱的日子......) :其实我不是想偷懒,因为需查询的表是不定的,我没有办法去确定表中的字段是哪些啊。
      

  8.   

    ashzs((可以包含中文字符)) :最好是一条sql吧,但使用存储过程也行。
      

  9.   

    你的意思就是输入table1,就查出除了id的所有字段是吧?
    汗,那你给每个表建个视图好了…………
      

  10.   

    hsj20041004(光芒):我想应该是有两种方式吧,一种是知道所有字段了,那就在写sql的时候不显示id就可以了,另一种是不知道所有字段,但确定没张表都会排除id字段,有点想talbe.* - id
      

  11.   

    ORARichard(没钱的日子......) :不用考虑表的关联吧,因为即使关联,查询以后的结果还是可以看作一张表的数据的。
      

  12.   

    baojianjun(包子) :谢谢,我用的数据库使oracle9.2.0.1.0
      

  13.   

    yxxx(小孬):建视图应该是不可能的,因为库中的表太多了,而且扩展性也很差啊
      

  14.   

    直接用sql是没有这个功能的.除非你写一个pl/sql
      

  15.   

    使用系统视图,来得到你想要得出了id以外的所有的列。然后再select
      

  16.   

    liuyi8903(甜脆夹心) 、GerryYang(轻尘) ( ):能给出更具体的方案吗,pl/sql我不是很熟
      

  17.   

    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;
    /
      

  18.   

    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;
    /
      

  19.   

    select * from col where tname=upper('abc');
    distinct一下不就是了,
    你看这个启发行不行
      

  20.   

    bisliu(努力学习oracle!) 
    我写的是取出所有的字段名称,
    你可以把这个结果用在直接的程序中。或者使用游标。一样可以完成。但是就需要修改当前的函数,使用存储过程,返回游标。