如何用SAS宏實(shí)現(xiàn)Oracle中的decode函數(shù)?
作者:AnyJack 
  decode函數(shù)是Oracle PL/SQL的功能強(qiáng)大的函數(shù)之一,那么可不可以用宏來(lái)實(shí)現(xiàn)它呢?答案是可定的,本文我們主要就介紹了用SAS宏實(shí)現(xiàn)Oracle中的decode函數(shù)的過(guò)程,希望能夠?qū)δ兴鶐椭?/div>  
 
                       
  Oracle數(shù)據(jù)庫(kù)中的decode函數(shù)是Oracle PL/SQL的常用函數(shù)之一,那么它的用途是什么呢?接下來(lái)我們就介紹這一過(guò)程以及如何用SAS宏來(lái)實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)中的decode功能。
先構(gòu)造一個(gè)例子,假設(shè)我們想給智星職員加工資,其標(biāo)準(zhǔn)是:工資在8000元以下的加20%;工資在8000元或以上的加15%,通常的做法是,先選出記錄中的工資字段值? select salary into var-salary from employee,然后對(duì)變量var-salary用if-then-else或choose case之類的流控制語(yǔ)句進(jìn)行判斷。 如果用decode函數(shù),那么我們就可以把這些流控制語(yǔ)句省略,通過(guò)SQL語(yǔ)句就可以直接完成。
SAS宏實(shí)現(xiàn)方法:
- %macro decode /PARMBUFF;
 - %local i count ifn valuen countall currfeild valueelse;
 - %let countall=%sysfunc(countw(&SYSPBUFF,%quote(,)));
 - %let count=%eval((&countall-1)/2);
 - %let currfeild=%scan(%quote(&SYSPBUFF),1);
 - case &currfeild
 - %do i=1 %to &count;
 - %let ifn=%scan(%quote(&SYSPBUFF),%eval(&i*2));
 - %let valuen=%scan(%quote(&SYSPBUFF),%eval(&i*2+1));
 - when &ifn then &valuen
 - %end;
 - %if %eval(&countall>(&count+1)) %then %do;
 - %let valueelse=%scan(%quote(&SYSPBUFF),&countall);
 - else &valueelse
 - %end;
 - end
 - %mend;
 
調(diào)用代碼如下,和oracle的調(diào)用方式和功能實(shí)現(xiàn)基本上都是一樣的。
- proc sql;
 - create table test as
 - select
 - %decode(sex,"男",0,"女",1,2)
 - as abc
 - from sashelp.class;
 - quit;
 
以上就是Oracle數(shù)據(jù)庫(kù)中decode函數(shù)的用途以及用SAS宏實(shí)現(xiàn)decode函數(shù)的方法,本文我們就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】
責(zé)任編輯:趙鵬 
                    來(lái)源:
                    CSDN博客
  
 
相關(guān)推薦
 
 
 
 














 
 
 