ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 用存储过程提取表记录行

用存储过程提取表记录行

原创 Linux操作系统 作者:fengjin821 时间:2009-06-18 22:38:44 0 删除 编辑

作用:输入一个表的名字就能显示这个表的所有字段的所有记录行

若表名不存在,提示:表名不存在

----------------------------------------------------------------------------

本来你这个需求其实很多余,因为如楼上所说,select * from tab;就可以满足你的需求。
但是我还是花了点时间做出了东西出来,
原因是好久不写plsql,好久不用dbms_sql,需要利用帮你解答问题的机会给自己练练手。
很多事情,都是说起容易做起难。

先show下我的结果吧:

SQL> create table hao as select object_id,object_name from user_objects where rownum<10;

Table created.

SQL> exec testbyhao('hao');
OBJECT_NAME     OBJECT_ID      
CON$    28      
I_COL2  46      
I_USER# 11      
C_TS#   6      
I_OBJ#  3      
I_CON2  49      
IND$    19      
BOOTSTRAP$      56      
UET$    13   

SQL> create table hao2 as select * from v$tablespace;

Table created.

SQL>  exec testbyhao('hao2');
ENCRYPT_IN_BACKUP       FLASHBACK_ON    BIGFILE INCLUDED_IN_DATABASE_BACKUP     NAME    TS#     
        YES     NO      YES     SYSTEM  0      
        YES     NO      YES     UNDOTBS01       1      
        YES     NO      YES     SYSAUX  2      
        YES     NO      YES     DATA01  4      
        YES     NO      YES     TEST01  5      
        YES     YES     YES     BIGTBS  14      
        YES     NO      YES     MD_DATA 7      
        YES     NO      YES     HAO     10      
        YES     YES     YES     BIGTBS2 15      
        YES     NO      YES     HAO2    11      
        YES     NO      NO      TEMP01  3      
        YES     NO      NO      TESTTEMP        13      
        YES     NO      YES     TEMPTEST        17      

PL/SQL procedure successfully completed.

SQL> exec testbyhao('hao3');
no such tables!

PL/SQL procedure successfully completed.



--------------------小v的分割线-------------------------------
以下是 testbyhao的代码。
CREATE OR REPLACE PROCEDURE testbyhao(tab in varchar2)
as
ISexist number;
ISexist_SQL varchar2(300);
ISexist_result varchar2(10);
getCol number;
getCol_SQL varchar2(300);
getCol_result varchar2(10);
getCol_colname varchar2(50);
all_cols varchar2(4000);
getRows number;
getRows_SQL varchar2(300);
getRows_result varchar2(10);
getRows_colname varchar2(4000);
begin
all_cols:='';
getRows_SQL:='select ';
ISexist:= dbms_sql.open_cursor;
ISexist_SQL := 'select TABLE_NAME from user_tables where lower(TABLE_NAME)=lower('''||tab||''')';
dbms_sql.parse(ISexist,ISexist_SQL,dbms_sql.v7);
ISexist_result := dbms_sql.execute(ISexist);
if dbms_sql.fetch_rows(ISexist) = 0 then
       dbms_output.put_line('no such tables!');
else
   getCol:= dbms_sql.open_cursor;
   getCol_SQL:= 'select COLUMN_NAME from user_tab_columns where lower(TABLE_NAME)=lower('''||tab||''')';
   dbms_sql.parse(getCol,getCol_SQL,dbms_sql.v7);
   dbms_sql.define_column(getCol,1,getCol_colname,50);
   getCol_result := dbms_sql.execute(getCol);
    loop
         if dbms_sql.fetch_rows(getCol) = 0 then
            exit;
         else
            dbms_sql.column_value(getCol,1,getCol_colname);
            all_cols:=all_cols||getCol_colname||CHR(9);
            getRows_SQL:=getRows_SQL||getCol_colname||'||CHR(9)||';
         end if;  
     end loop;
     dbms_sql.close_cursor(getCol);
     dbms_output.put_line(all_cols);
   getRows_SQL:=getRows_SQL||''''' as allinone from '||tab;
   --dbms_output.put_line(getRows_SQL);
   getRows:= dbms_sql.open_cursor;
   dbms_sql.parse(getRows,getRows_SQL,dbms_sql.v7);
   dbms_sql.define_column(getRows,1,getRows_colname,4000);
   getRows_result := dbms_sql.execute(getRows);
   loop
         if dbms_sql.fetch_rows(getRows) = 0 then
            exit;
         else
            dbms_sql.column_value(getRows,1,getRows_colname);
            dbms_output.put_line(getRows_colname);
         end if;  
     end loop;   
dbms_sql.close_cursor(ISexist);
dbms_sql.close_cursor(getRows);
end if;
end;

 

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13165828/viewspace-606896/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-29

  • 博文量
    191
  • 访问量
    504994