首页 > Linux操作系统 > Linux操作系统 > 用存储过程提取表记录行
作用:输入一个表的名字就能显示这个表的所有字段的所有记录行
若表名不存在,提示:表名不存在
----------------------------------------------------------------------------
本来你这个需求其实很多余,因为如楼上所说,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博客 ” ,链接:https://blog.itpub.net/13165828/viewspace-606896/ ,如需转载,请注明出处,否则将追究法律责任。