create or replace procedure Test_GetOaUserInfo as
--authid current_user操作當前存儲過程的當前用戶,否則提示權限不足,但是這樣存儲過程這能執行一次
--,或者GRANT CREATE ANY TABLE TO any users;
timePoint Date;
tabCstr varchar2(1000); --創建表的字符串
varNum number(1) default 0; --定義統計記錄變量默認爲0
tabDstr varchar2(500); --存數據的字符串
tabData varchar2(500); -- 存數據的字符串
maxRow number;
begin
--抓取截止日期
select max(last_date) into timePoint from basedb_users;
--存取表的記錄數
select count(*) into varNum from user_tables where table_name='BASEDB_USERS_TEMP_TB';
if timePoint is null then
begin
timePoint:=sysdate;
end;
end if;
dbms_output.put_line(to_char(timePoint,'YYYY-mm-dd hh24:mm:ss')); --set serveroutput on
dbms_output.put_line(varNum);
--創建臨時表
if varNum < to_number(1) then --如果沒有數據表創建臨時表
--dbms_output.put_line('執行了啊');
tabCstr := 'create global temporary table BASEDB_USERS_TEMP_TB(
ID INTEGER not null,
LOGINID VARCHAR2(15),
FIRSTNAME VARCHAR2(30),
LASTNAME VARCHAR2(60),
FULLNAME VARCHAR2(100),
SEX CHAR(1),
JOBTITLE INTEGER,
SUBCOMPANYID INTEGER,
DEPARTMENTID INTEGER,
MANAGEID INTEGER,
WORKCODE VARCHAR2(15),
LAST_DATE DATE,
ACTION_SIGN CHAR(1),
STATUS CHAR(1),
PASSWORD VARCHAR2(50)
)ON COMMIT PRESERVE ROWS '; --ON COMMIT PRESERVE ROWS 會話級臨時表 ,ON COMMIT delete ROWS 事務級臨時表
execute immediate tabCstr;--執行DDL語句
end if;
--導入數據到臨時表中
begin
tabData := 'insert into BASEDB_USERS_TEMP_TB(id,fullname)
select to_number(u.id) id,u.fullname from
FMASTER.basedb_users@linkoa u where u.last_date < :1 ' ;
execute immediate tabData using timePoint;
commit;
end;
dbms_output.put_line(tabData);
select max(rownum) into maxRow from
FMASTER.basedb_users@linkoa u where u.last_date < timePoint; --查詢中最大記錄數
commit;
dbms_output.put_line('記錄數'||maxRow);
--刪除臨時表
--tabDstr := 'truncate table BASEDB_USERS_TEMP_TB ';
--execute immediate tabDstr;
--tabDstr := 'drop table BASEDB_USERS_TEMP_TB ';
--execute immediate tabDstr;
-- commit;
end Test_GetOaUserInfo;