本帖最后由 xuanner 于 2009-09-03 21:48:27 编辑

解决方案 »

  1.   

    表名是参数,列名是变的,所以不能用静态sql了,需要根据user_tab_cols选择出所有的字段,然后根据字段和表名,拼成貌似select * from table_name where col_name1 like 'SQ%' or col_name2 like 'SQ%' ....这样的一个字符串然后用open c for sql;打开游标,可以把游标作为返回值。这里只能用sp或者funtin来做了,sql是搞不定的
      

  2.   

    查询表名
    select column_name,data_type ,data_length,data_precision,data_scale from user_tab_columns [where table_name='my_tab'];如果是向表中插入数据,不用那么麻烦做判断,直接insert就行
    insert into my_tmp(tname,cname)
    select 'my_tab',column_name
    from user_tab_columns
    where table_name='my_tab' and column_name like 'SQ%';
      

  3.   


    顶,说的不错!用sp或者function吧!
      

  4.   


    我就用存储过程弄出来了啊!!!!研究下还不会很难, 现贴出代码出来!!!!
    CREATE OR REPLACE PROCEDURE GET_ALL_TABLE_SQID IS  CURSOR mOutCur IS  SELECT TABLE_NAME AS TNAME  FROM ALL_TABLES  WHERE OWNER='LZSQ'  AND TABLE_NAME NOT LIKE 'CODE_%%'  AND TABLE_NAME NOT LIKE 'WB%%'  AND TABLE_NAME NOT LIKE 'GNET_CODE_%%';  TYPE DYNCURSOR IS REF CURSOR;  mDynCur DYNCURSOR;  sTableName VARCHAR2(100);  sColumnName VARCHAR2(100);  sSQCnt VARCHAR2(10);  sSQLBuff VARCHAR2(100);BEGIN  sSQCnt:='0';  OPEN mOutCur;  FETCH mOutCur INTO sTableName;  WHILE mOutCur%FOUND LOOP    OPEN mDynCur FOR 'SELECT COLUMN_NAME FROM ALL_TAB_COLS WHERE OWNER=''LZSQ'' AND DATA_TYPE=''VARCHAR2'' AND TABLE_NAME='''||sTableName||'''';    FETCH mDynCur INTO sColumnName;    WHILE mDynCur%FOUND LOOP      sSQLBuff := 'SELECT COUNT(*) INTO :x FROM '||sTableName||' WHERE "'||sColumnName||'" LIKE ''SQ%''';      DBMS_OUTPUT.PUT_LINE('['||sTableName||']-['||sColumnName||']......OK!');      EXECUTE IMMEDIATE sSQLBuff INTO sSQCnt;      IF TO_NUMBER(sSQCnt)>0 THEN        INSERT INTO MY_SQID_TAB(TABNAME,COLNAME) VALUES(sTableName,sColumnName);        COMMIT;      END IF;      FETCH mDynCur INTO sColumnName;    END LOOP;    CLOSE mDynCur;    FETCH mOutCur INTO sTableName;  END LOOP;  COMMIT;  CLOSE mOutCur;END GET_ALL_TABLE_SQID;