2012-12-21 47 views
-2

我在PL/SQL中使用以下光標:如何交換pl/sql中的行值 - Oracle?

ID  Team  OrigRank  RegSesRank 
7844 XXX  2   8 
7854 YYY  1   1 

我需要能夠寫一些實物的if-else語句來交換origRankIFRegSesRank比其他RegSesRank更大

即上述不會改變,因爲7844有更大的RegSesRank7854因此OrigrRank不應該改變,但是,OrigRank時,必須注意7854被swaped了較大RegSesRank

我希望我很清楚。請讓我知道如果您有任何問題,我真的很感謝您的幫助

+1

請注意,在列中存儲行相關數據違反了關係數據庫規範化。你應該這樣做的方式是使用聚合函數,但是由於你沒有告訴我們'OrigRank'和'RegSesRank'是什麼意思,我不知道要替換它們。 –

+0

什麼是OgiRank和RegsesRank?不知道他們的服務宗旨,可能無法給出正確的答案。 –

回答

0

我不會解決這個問題與PL/SQL遊標中的if/else語句,因爲它引用查詢的其他行。相反,如果需要,我會使用UPDATE將所有origRank更改爲新值。

通常的方法是嵌套的UPDATE (SELECT ... FROM mytable JOIN ...) SET origrank = newrank WHERE origrank != newrank。舉個例子,我們需要知道@Joe W和@Dour High Arch指出的新排名是如何計算的。