Oracle儲存過程表名稱列名稱做引數,動態SQL

2021-07-29 22:32:15 字數 2845 閱讀 8807

當前的系統中有幾種日誌資訊做了分表處理,每個月插入到乙個表中,乙個表的分表有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...