儲存過程通過遍歷表名資訊表查所有表資料總量

2021-08-20 21:55:28 字數 2217 閱讀 2887

--建立存過

create

orreplace

procedure test111 is

--定義變數

--表名

v_table_name 表名資訊表.table_name%type;

--每張表資料總量

v_scount number(10);

--所有表資料量總和

v_sscount number(10):=0;

--動態拼接sql

v_sql varchar2(300);

--定義游標

cursor cur_info is

select table_name from 表名資訊表;

begin

--迴圈開始

loop

--開游標

ifnot cur_info%isopen then

open cur_info;

endif;

--fetch遍歷

fetch cur_info into v_table_name;

--退出迴圈的條件

exit when cur_info%notfound or cur_info%notfound is null;

--有變數拼動態語句

v_sql:='select

count(1) from

'|| v_table_name;

execute immediate v_sql into v_scount;

dbms_output.put_line('表名為' || v_table_name || '數量' || v_scount);

v_sscount := v_sscount + v_scount;

end loop;

--關游標

if cur_info%isopen then

close cur_info;

end if;

dbms_output.put_line('所有表資料總量為' || v_sscount);

end;

create

orreplace

procedure test222 is

--定義變數

--v_table_name 表名資訊表.table_name%type;

v_scount number(10);

v_sscount number(10):=0;

v_sql varchar2(300);

--定義游標

cursor cur_info is

select table_name from 表名資訊表;

begin

--迴圈開始

--for遍歷

for v_table_name in cur_info loop

--有變數拼動態語句

v_sql:='select count(1) from '|| v_table_name.table_name;

execute immediate v_sql into v_scount;

dbms_output.put_line('表名為' || v_table_name.table_name || '數量' || v_scount);

v_sscount := v_sscount + v_scount;

end loop;

dbms_output.put_line('所有表資料總量為' || v_sscount);

end;

​ 方法二要注意,v_table_name不能像方法一裡面那樣定義,並且需要在拼動態語句的時候.列名,不然會報 「錯誤: pls-00306: 呼叫 『put_line』 時引數個數或型別錯誤」

補充三點:

使用oraclesqldeveloper執行儲存過程的時候,如果想看到列印結果,有時候 需要set serveroutput on把輸入開啟;

使用oraclesqldeveloper除錯儲存過程的時候,需要先root使用者給當前使用者加除錯許可權grant debug connect session to usb;,grant debug connect session to usb;

如果儲存過程有問題導致一直被占用無法刪除報錯」ora-04021」的時候,需要

通過儲存過程 查詢表資訊

region 查詢 獲取裝置列表 翻頁引數 裝置編號 裝置名稱 裝置sn號 裝置狀態 溫度 濕度 電壓 訊號 通訊方式 空字串為忽略 分配情況 0為未分配,1為分配 分配物件 最後更新時間 建立時間 裝置資訊列表 datatable public datatable getequipmentslis...

儲存過程動態表名

create or replace procedure bxsp data qb startdate in varchar2,開始日期 enddate in varchar2,結束日期 feetype in varchar2,費用型別 procesnode in varchar2,流程節點 audi...

mysql 儲存過程 動態表名

想寫乙個儲存過程,實現不同的庫下不同表的查詢功能,發現表名傳遞跟其他變數不一樣 delimiter create procedure proc begin set v databasename unibiz0122013 set v tablename mail open 05 set v sql ...