print the result sql
create or replace procedure Print_sql(sqltest varchar2) is
/*
作者:李紅傑
說明:為了進行效能的管理,對一些效能管理的語句做一些必要的結果的輸出!!
*/
begin
dbms_output.enable(2000000);
--驗證輸入的SQL語句是否有問題!!
--利用DBMS__SQL包進行資料正確性的判斷!!
----------------------------------------------------------------------
declare
cur_sql_int number:=0;
cur_sqltest varchar2(500):=0;
begin
cur_sqltest:=sqltest;
cur_sql_int:=dbms_sql.open_cursor;
dbms_sql.parse(cur_sql_int,cur_sqltest,dbms_sql.v7);
--dbms_output.put_line(cur_sql_int);
dbms_sql.close_cursor(cur_sql_int);
exception
when others then
dbms_output.put_line(' 錯誤提示:');
dbms_output.put_line(' 請檢查你的SQL語句!');
dbms_output.put_line(' '||substrb(sqlerrm,1,200));
return;
end;
--對SQL 語句進行簡單的判斷!並對列的資訊進行解析!!
--獲得語句列資訊的詳細
------------------------------------------------------------------------
declare
fh_01 varchar2(2):='*';
fh_02 number:=0;
fh_03 number:=0;
fh_04 varchar2(500);--要格式話的SQL語句
fh_05 varchar2(500);--列的資訊
fh_06 number:=1; --輸出列的數量
fh_07 number:=1;
fh_08 varchar2(100);
type cols_list_type is table of varchar2(30) index by binary_integer;
cols_list cols_list_type; --定義成公共的方便下面的呼叫
begin
fh_04:=upper(sqltest);
dbms_output.put_line(' '||fh_04);
fh_02:=instr(fh_04,fh_01);
--dbms_output.put_line(fh_02);
if fh_02>0 then
--當有 * 出現的時候!
--只輸出20列
--簡單的SQL語句還比較容易處理
--但是複雜的SQL語句就很不容易處理拉!
--避免出現乘號的時候 8 kais
declare
fh_001 number:=0;
fh_002 varchar(100);
begin
fh_001:=instr(fh_04,'SELECT');
fh_03:=instr(fh_04,'FROM');
fh_002:=substrb(fh_04,fh_001+7,fh_03-fh_001-7);
dbms_output.put_line(fh_001||''||fh_03||' :'||fh_002);
if rtrim(ltrim(fh_002))='*' then
dbms_output.put_line(' 警告:QQ');
dbms_output.put_line(' 警告:');
dbms_output.put_line(' 暫時不做處理!');
return;
end if;
end;
end if;
if fh_02=0 then
--當沒有* 出現的時候!
begin
fh_03:=instr(fh_04,'FROM');
fh_05:=ltrim(rtrim(substrb(fh_04,8,fh_03-8)));
--要用一個自己呼叫自己的過程
while instr(fh_05,',',1,fh_06)>0 loop
cols_list(fh_06):=replace(substrb(fh_05,fh_07,instr(fh_05,',',1,fh_06)
-fh_07),',','');
fh_07:=instr(fh_05,',',1,fh_06);
fh_06:=fh_06+1;
end loop;
cols_list(fh_06):=replace(substrb(fh_05,fh_07),',','');
--dbms_output.put_line(fh_06);
--在這個地方對SQL 語句進行特定的格式
for i in 1..20-fh_06 loop
fh_08:=fh_08||','''' ';
end loop;
fh_04:=replace(fh_04,fh_05,fh_05||fh_08);
end;
end if;
--輸出與列印相關的資訊 需要用動態的語句
--生成必要的動態語句
------------------------------------------------------------------------
declare
exe_sql varchar2(5000);
out_01 varchar2(200);
out_02 varchar2(200);
out_03 varchar2(200);
out_04 varchar2(200);
out_05 varchar2(200);
out_06 varchar2(200);
out_07 varchar2(200);
out_08 varchar2(200);
out_09 varchar2(200);
out_10 varchar2(200);
out_11 varchar2(200);
out_12 varchar2(200);
out_13 varchar2(200);
out_14 varchar2(200);
out_15 varchar2(200);
out_16 varchar2(200);
out_17 varchar2(200);
out_18 varchar2(200);
out_19 varchar2(200);
out_20 varchar2(200);
type cur_type is ref cursor;
cur_001 cur_type;
v_bt varchar2(500);
v_jlx varchar2(500);
begin
--對標題要進行全面的格式話!!
--dbms_output.put_line('%^%^%^');
if fh_06>20 then
dbms_output.put_line('the columns must be smaller than 20!');
return;
end if;
for i in 1..fh_06 loop
v_bt:= v_bt||lpad('-------------------',20,' ');
end loop;
--對記錄項進行格式話
for i in 1..cols_list.count loop
v_jlx:=v_jlx||lpad(substrb(cols_list(i),1,12),20,' ');
end loop;
dbms_output.put_line(v_jlx);
dbms_output.put_line(v_bt);
open cur_001 for lower(fh_04);
loop
fetch cur_001 into out_01,out_02,out_03,out_04,out_05,out_06,
out_07,out_08,out_09,out_10,out_11,out_12,out_13,out_14,out_15,
out_16,out_17,out_18,out_19,out_20;
exit when cur_001%notfound;
--對輸出進行格式的處理!!
out_01:=lpad(out_01,20,' ');
out_02:=lpad(out_02,20,' ');
out_03:=lpad(out_03,20,' ');
out_04:=lpad(out_04,20,' ');
out_05:=lpad(out_05,20,' ');
out_06:=lpad(out_06,20,' ');
out_07:=lpad(out_07,20,' ');
out_08:=lpad(out_08,20,' ');
out_09:=lpad(out_09,20,' ');
out_10:=lpad(out_10,20,' ');
out_11:=lpad(out_11,20,' ');
out_12:=lpad(out_12,20,' ');
out_13:=lpad(out_13,20,' ');
out_14:=lpad(out_14,20,' ');
out_15:=lpad(out_15,20,' ');
out_16:=lpad(out_16,20,' ');
out_17:=lpad(out_17,20,' ');
out_18:=lpad(out_18,20,' ');
out_19:=lpad(out_19,20,' ');
out_20:=lpad(out_20,20,' ');
--dbms_output.
--怎樣清空這個隱含的快取!!
dbms_output.put_line(out_01||out_02||out_03||out_04||out_05||
out_06||out_07||out_08||
out_09||out_10||out_11||out_12||out_13||out_14||out_15||out_16||
out_17||out_18||out_19||out_20);
end loop;
dbms_output.put_line(v_bt);--instruction
dbms_output.put_line(lpad('-----☆made by lihj☆',length(v_bt),' '));
dbms_output.put_line(lpad('instruction: ',length(v_bt),' '));
dbms_output.put_line(lpad('the columns must be smaller than 20!',
length(v_bt),' '));
end;
end;
end Print_sql;
--以上的儲存過程可以列印一般的SQL語句!!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9879835/viewspace-1000183/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- How to use sql result stored on shell variable?SQL
- 1223 result cache,sql profile,sql patchSQL
- 使用RESULT CACHE加速SQL查詢效率SQL
- Oracle11g新特性:SQL Result Cache [zt]OracleSQL
- JavaScript print()JavaScript
- js printJS
- PHP 列印函式之 print print_rPHP函式
- SQL Query Result Cache的使用和配置--Oracle 11G新特性SQLOracle
- Python print函式用法,print 格式化輸出Python函式
- 字串函式 print ()字串函式
- python print 用法Python
- java-- Print流Java
- print基礎用法
- jQuery event.resultjQuery
- Oracle Query Result CacheOracle
- Android KitKat Print框架Android框架
- pycharm print 加顏色PyCharm
- Oracle 11.2.0.1 Result Cache 測試 - 12 DBMS_RESULT_CACHE管理包Oracle
- FileReader result 屬性
- 淺談Oracle Result CacheOracle
- How to check payroll result is posted?
- Numercial result of ADFP
- WPF open image and print as pdf file
- print 與 println 的區別
- attempt to index local ‘result‘ (a nil value)Index
- mysqldump --result-file引數MySql
- [iOS]This will result in loss of keychain access ?iOSAI
- python3 print報錯Python
- Notes for building gimp-printUI
- Error ./bin/my_print_defaults: not foundError
- 【Python】 Missing parentheses in call to 'print'Python
- HOW TO PRINT FILE TO NOTEPAD IN GUI?GUI
- exclude Log4j print Log
- query result cache in oracle 11gOracle
- struts2 result type型別型別
- Result Sets from Stored Procedures In Oracle (轉)Oracle
- Numercial result of irRMILrp-CGP
- python ruturn 和 print 的區別Python