今天修復資料寫了個pl/sql
以下這個pl/sql 是針對業務資料出了問題
而進行修復的,涉及到一些判斷
spool test.log
declare
CURSOR emp_cur IS
SELECT a.client_id client_id,
b.login,
b.login_uid,
c.amount amount,
c.created_date created_date,
c.status,
d.after_balance after_balance
from tb_test_status a,
tb_test b,
(select account_id, amount,created_date,status
from (select account_id,
amount,
created_date,
status,
row_number() over(partition by account_id order by created_date desc) rn
from tb_test_log
where account_id in (select client_id
from tb_client_status
where online_ = 'T'))
where rn = 1) c,
(select client_id, after_balance
from (select client_id,
after_balance,
row_number() over(partition by client_id order by created_date desc) rn
from tb_test2_log
where client_id in (select client_id
from tb_client_status
where online_ = 'T')
and transaction_code_id = 3
and system_type = 2
and status = 1)
where rn = 1) d
where a.online_ = 'T'
and a.client_id = b.id
and c.account_id = b.id
and a.client_id = d.client_id(+);
---以上是定義個遊標
emp_rec emp_cur%ROWTYPE;
cashtransfer_date date;
cashflow_date date;
BEGIN
FOR emp_rec IN emp_cur LOOP --for迴圈
select nvl(max(created_date),to_date('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) into cashtransfer_date
from tb_cashtransfer_log where account_id=emp_rec.client_id;
select nvl(max(created_date),to_date('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) into cashflow_date
from tb_cashflow_log where client_id=emp_rec.client_id and transaction_code_id=3 and system_type=2 and status=1;
if cashtransfer_date>cashflow_date then --判斷
update tb_test_log set tb_cashtransfer_log.status=0 where account_id=emp_rec.client_id and created_date=emp_rec.created_date;
update tb_test set credit_amount=emp_rec.AMOUNT,LAST_MODIFIED_DATE=sysdate Where id=emp_rec.client_id;
update tb_test_status set LOCATION_TYPE=0,ONLINE_='F',LAST_MODIFIED_DATE=sysdate Where client_id=emp_rec.client_id;
else
update tb_test_log set status=2 where account_id=emp_rec.client_id and created_date=emp_rec.created_date;
insert into tb_test_log
(transfer_type,account_type,account_id,amount,login_uid,status,created_date,last_modified_date,ref_no)
values
(2,1,emp_rec.client_id,emp_rec.after_balance,emp_rec.login_uid,2,sysdate,sysdate,' ');
update tb_test_status set LOCATION_TYPE=0,ONLINE_='F',LAST_MODIFIED_DATE=sysdate,Cashtransferid=S_TB_CASHTRANSFER_LOG.currval Where client_id=emp_rec.client_id;
update tb_test set credit_amount=emp_rec.after_balance,LAST_MODIFIED_DATE=sysdate Where id=emp_rec.client_id;
end if;
end loop;
commit;
END;
/
spool off;
exit;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-420479/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server 資料頁損壞修復SQLServer
- 今天寫了一個統計執行sql次數的指令碼SQL指令碼
- SQL Anywhere db檔案損壞修復 DB檔案修復 DB資料庫修復SQL資料庫
- PL/SQL Develop的一個Bug[Oracle資料庫中慎用小寫表名]SQLdevOracle資料庫
- 資料庫修復資料恢復資料庫資料恢復
- Oracle PL/SQL編寫PL/SQL程式碼的注意事項OracleSQL
- 勒索病毒資料修復恢復
- PL/SQL相關的資料字典SQL
- PL/SQL複合資料型別SQL資料型別
- SQL Server使用者自定義的資料庫修復SQLServer資料庫
- 伺服器資料修復的幾個技能伺服器
- Firebird資料庫修復資料庫
- Interbase資料庫修復資料庫
- 今天和同事一起診斷了一個sql案例SQL
- PL/SQL使用匿名塊處理資料SQL
- pl/sql更新某個員工的工資SQL
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-使用者定義的PL/SQL子型別SQL資料型別
- 如何修復mysql資料庫MySql資料庫
- 模擬修復AD資料
- 小資料:ASPr API修復API
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- Gitea 1.11.1 釋出了,修復了 14 個 bugGit
- JDK 18修復了三個重要功能 - mallocJDK
- Oracl資料庫+PL/SQL安裝與配置資料庫SQL
- Backup And Recovery User's Guide-RMAN資料修復概念-RMAN資料修復技術GUIIDE
- PL/SQL 01 程式碼編寫規則SQL
- 修復損壞的資料塊
- Oracle資料庫壞塊修復Oracle資料庫
- pl/sql developer將excel資料匯入到資料庫中SQLDeveloperExcel資料庫
- PL/SQL初學者必讀:幾十個實用的PL/SQL (轉)SQL
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- 今天看了一些ORACLE10G PL/SQL方面的知識OracleSQL
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- 一個併發SQL資料庫卡主了SQL資料庫
- PL/SQL Developer連線遠端Oracle資料庫SQLDeveloperOracle資料庫
- RMAN 資料庫修復(restore)與資料庫恢復(recover)介紹資料庫REST
- 今天踩了一個基礎坑
- 如何在PL/SQL中讀寫檔案(轉)SQL