如题:
  
    比如说我有一个表temp_table  中有
    name varchar2(32),sex varchar2(1),class varchar2(32),birthday date    
    四个字段,现在我要写一个sql  求得表中字段类型为varchar2(32)的所有数据,即要求得所有的name  和 class的数据谢谢!

解决方案 »

  1.   

    select column_name,data_type,data_length from all_tab_columns where table_name='TEMP_TABLE'
      

  2.   

    思路大致如下:
    declare   tabname varchar2(40);
       fldname varchar2(40); 
       fldlength number;
       v_sql  varchar2(1000);
       cur_result sys_cursor;
       cursor cur_fld is
       select column_name from all_tab_columns where table_name=tabname and data_type=fldlength ;
    begin
    --1、取出符合条例的字段名
       open cur_fld;
       loop
           fetch cur_fld into fldname ;
           exit when cur_fld%notfound;
           v_sql:=v_sql || fldname || ',';
           
       end loop;
       close cur_fld;
       v_sql:=substr(v_sql,length(v_sql) - 1);
       v_sql:='select ' ||v_sql || ' from ' || tabname;
       open cur_result  for v_sql;
      

  3.   


    declare
     v_sql varchar2(200) := 'select ';begin
         for cur_temp in (select * from user_tab_columns ut where ut.TABLE_NAME = upper('temp_table') and data_type = upper('VARCHAR2') and data_length = 32) loop
             v_sql := v_sql || cur_temp.column_name||',';
         end loop;
         v_sql := rtrim(v_sql,',')||' from temp_table';
         dbms_output.put_line(v_sql);
         execute immediate v_sql;
    end;