Oracle儲存過程實現通過動態引數複製表

2021-08-28 12:19:33 字數 1251 閱讀 2862

--使用儲存過程複製表,使用儲存過程來複製錶比使用自定義函式更簡單,因為自定義函式返回多行結果需要用游標,但帶游標的查詢語句不能用於create as。

create or replace procedure createtable(tname in varchar2,id in number)

is --sql_sent是用來儲存sql語句的臨時變數,儲存過程可以不設定返回值,這也是它和自定義函式的重要區別

sql_sent varchar2(20000);

begin

sql_sent:='create table '||tname||' as select col from tablename where id='||id;

execute immediate sql_sent;

commit;

end;

--執行儲存過程

exec createtable('new_tablename',112);

上面是比較簡單的引數傳入,涉及到時間引數時,處理起來會麻煩一些,時間引數如下:

上面是比較

//複製join之後的表,並將時間作為傳入的引數。這個地方很容易出錯,首先就是單引號的問題,需要再加單引號實現轉義

,所以最好是用dbms_output.put_line(sql_sent);輸出sql語句看一下是否正確

create or replace procedure createtable(tname in varchar2,date_time in varchar2)

is sql_sent varchar2(20000);

begin

sql_sent:='''yyyy-mm-dd''';

sql_sent:='create table '||tname||' as select * from tablename where trunc(sa_time)>=to_date('||date_time||','||sql_sent||')';

--這樣拼接的字串作sql語句常常容易出現拼寫的問題,所以最好是輸出語句檢查一下是否存在問題

dbms_output.put_line(sql_sent);

execute immediate sql_sent;

commit;

end;

--執行儲存過程

exec createtable('newtablename','''2018-09-01''');

通過儲存過程實現分頁

create procedure dbo commonpageselect sqlwhere varchar 1000 查詢條件 pagenum int 20,每頁的記錄數 beginline int 1,第幾頁,預設第一頁 sqltable varchar 5000 要查詢的表或檢視,也可以一句s...

通過儲存過程實現排序

通過儲存過程實現排序 create or replace procedure sort node www.2cto.com node xlid in varchar2 as v start node varchar2 100 v node1 varchar2 100 v node2 varchar2...

oracle儲存過程實現分頁

建立儲存過程 建立存放游標的包 create or replace package page package is 申明游標 type page cursor is ref cursor end page package 建立查詢所有使用者的過程 create or replace procedur...