當前的系統中有幾種日誌資訊做了分表處理,每個月插入到乙個表中,乙個表的分表有12個。這樣的這種表有四個左右。
有個定時器,每天晚上的時候去執行滿足條件的表去刪除日誌的資訊,可以配置儲存日誌的時間的。
所以只想要通過表名稱,刪除時間資訊,列名稱。
create
orreplace
procedure alarm_log_clear(
table_name in
varchar,//表名稱
rowname in
varchar,//列名稱
actiontime in
varchar//產生時間
) as
max_rows number (10) ;
delete_count number ;
selectcountstr varchar2 (500) := '' ;//作為動態sql的選擇數量
deletestr varchar2(500):='';
starttime date;
begin
max_rows := 1000 ;
delete_count := 0 ;
starttime :=to_date(actiontime, 'yyyy-mm-dd');
selectcountstr := 'select
count(*) from
' ||table_name || '
where
'|| rowname ||'
<=:1
';
//使用動態sql語法將count的值放置到delete_count中去
//必須using starttime,直接拼接會錯誤的 ||這種錯誤的!
execute immediate selectcountstr into delete_count using starttime;
commit;
--dbms_output.put_line(selectcountstr||'
'||delete_count);
deletestr :='
delete
from
' || table_name || '
where
' || rowname || '
<=:1
and rownum <=:2
'; if delete_count = 0 then return;
end if;
//這裡就是乙個for巡迴的刪除資訊,動態sql和這個一樣的
for i in 1..trunc (delete_count / max_rows) + 1 loop
execute immediate deletestr using starttime, max_rows;
commit;
end loop ;
end;
execute immediate v_sql [bulk collect into 或into 返回值變數 ][into 入參 1,.., out 出參1,..]
說明:
1. v_sql為varchar2型別或clob(11g才支援),可以為ddl、dml等動態拼接的sql字串。用在pl/sql**中時,如果是varchar2型別,則長度不能大於32767(32k)。
v_sql為dml動態語句時,執行後不會提交,需要使用commit顯式提交。如果為ddl命令,執行後則會提交所有之前改變的。
如果需要從動態sql返回值,則可以定義返回值變數,bulk collect into返回多行值,此時定義的變數需是組變數的列數表或記錄表型別;into返回單行,此時定義的變數可以使多個pl/sql變數的列表或記錄型別。
如果動態sql中需要繫結變數,則使用using,通常繫結的變數為輸入入參,此時變數的in可以省略;如果需要繫結輸出變數(如呼叫過程時可能需要輸出),則在變數前用out顯示指明。
參考動態sql部落格
參考部落格,orcle基本的語法
* 基本的語法
create
or replace procedure 儲存過程名字
( 引數1 in number,
引數2 in number
)is/as
變數1 integer :=0;
變數2 date;
begin
end
select col1,col2 into 變數1,變數2
from typestruct where ***;
if v_test=1 then
begin
do something
end;
endif;
v_test :=123;
public
intexecuteupdate(connection conn, string tablename, string columename, string actiontime)");
cs.setstring(1, tablename);
cs.setstring(2, columename);
cs.setstring(3, actiontime);
cs.execute();
return
1; } catch (sqlexception e) finally
return
0; }
Oracle 儲存過程表名稱列名稱做引數
當前的系統中有幾種日誌資訊做了分表處理,每個月插入到乙個表中,乙個表的分表有12個。這樣的這種表有四個左右。有個定時器,每天晚上的時候去執行滿足條件的表去刪除日誌的資訊,可以配置儲存日誌的時間的。所以只想要通過表名稱,刪除時間資訊,列名稱。create orreplace procedure ala...
sql server 查詢表名,儲存過程,列名等
1 獲取當前資料庫中的所有使用者表 select name from sysobjects where xtype u and status 0 2 獲取某乙個表的所有字段 select name from syscolumns where id object id n 表名 select a.fr...
Oracle 建立表,儲存過程
1.首先建立乙個customer 表 create table customer customerid varchar2 10 primary key,customername varchar2 20 custoemr varchar2 8 custoemrage int 2.插入四行資料 inse...