利用PL/SQL開發(fā)基金持倉表

今天是2017.5.8r。

晚上快七點的時候下樓去對面卓越時代廣場吃家樂緣梭冠,從去年到現(xiàn)在辕狰,在sz實習(xí)的期間吃飯的地點來來去去也就是在這附近了,除此基本別無其他控漠。每次我自己一個人吃蔓倍,習(xí)慣了也不會覺得別扭,只是偶爾會意識到很久沒有和別人講過話了润脸。吃完往回走柬脸,等紅綠燈的時候以為來實習(xí)已經(jīng)快一個月了,發(fā)現(xiàn)只是錯覺而已毙驯。剛剛六點多終于把這幾天的基金持倉表存儲過程開發(fā)好了倒堕,可能因此有了些許輕松感,而不再覺得時間難熬爆价。

說實話垦巴,自己真的很抵觸陌生的環(huán)境陌生的人,覺得在自己的圈子里就挺好的铭段,想一直呆在里面不出來骤宣,可是經(jīng)過了那么多的事情,自己也清楚知道哪有那么好的事序愚,這世界上除非你不工作呆家里不出來憔披,否則你總會要和形形色色的人打交道,還要隨時生硬的保持一副笑臉,不然就會讓別人覺得自己是多么的不合群芬膝,可是只有自己知道望门,在自己的內(nèi)心世界里,你們才是不合群的人锰霜。

好了筹误,可能只是純粹的想說點什么而已。接下來幾天還要有幾件事要做:
1.把老師布置的小論文改好癣缅;
2.周五中午請假回去弄新的三方厨剪,然后找淘寶辦理六月初的簽證,順便把宿舍的鞋什么整理一下友存;
3.這個月底就是正式答辯和宇北鼻的生日了祷膳;
4.在想租房子住的事。


總結(jié)一下自己上周和這周的工作爬立, 主要涉及將舊估值系統(tǒng)和新估值系統(tǒng)中的數(shù)據(jù)整合到一起钾唬,自己負(fù)責(zé)基金持倉數(shù)據(jù)表的整理,先說一下自己的邏輯思路以及遇到的難點侠驯,最后貼上代碼。

1.工作思路

首先創(chuàng)建目標(biāo)表奕巍,然后將gz25中的估值數(shù)據(jù)利用存儲過程對應(yīng)插入到創(chuàng)建的表中吟策,最后再在SQL窗口中調(diào)用即可。

2.工作難點

(1)前面5天的時間基本全部花在對gz25系統(tǒng)中的數(shù)據(jù)對照目標(biāo)表字段進(jìn)行整理了的止,因為gz25中是分套帳(即一個產(chǎn)品有一個相應(yīng)的表)的檩坚,每個表名和里面的基金產(chǎn)品code是一一對應(yīng)的,所以首先將每個表以及對應(yīng)產(chǎn)品id找出來诅福,以便后面進(jìn)行一一遍歷匾委,后面在存儲過程中是利用游標(biāo)循環(huán)來實現(xiàn)遍歷的。

(2)使用游標(biāo)循環(huán)時必然會用到loop.....end loop氓润,在這之間還要用begin...end赂乐。

(3)定義每次循環(huán)時執(zhí)行的sql語句是變化的,因為一次循環(huán)就要遍歷一個不同的表咖气,所以定義了v_sql挨措。此時要注意的是v_sql的賦值用‘ ’括起來,而在‘ ’里面如果又用到了‘ ’字符串崩溪,則需要用兩個單引號‘‘浅役,其中一個單引號表示轉(zhuǎn)義。

(4)pl/sql中寫的alter ,insert 等語句均需要添加一個commit;只有這樣提交后對應(yīng)表中的數(shù)據(jù)才會發(fā)生變化伶唯。

(5)還有一個問題是創(chuàng)建TEMPORARY TABLE 觉既,后跟的ON COMMIT PRESERVE(delete) ROWS;必須要加上,同時注意創(chuàng)建這樣的臨時表時,若在一個sql窗口中進(jìn)行了插入值操作瞪讼,如果沒有commit提交钧椰,那么在另一個sql會話窗口中是不能查詢到表中的值,所以在進(jìn)行insert尝艘、update等操作時一定要提交演侯。

(6)篩選大于某一日期的數(shù)據(jù): 字段名> to_date('20161202','yyyymmdd')

(7)建立DBlink跨庫連接:(參考文章 http://blog.csdn.net/gavinloo/article/details/6459619)

(8)關(guān)于使用動態(tài)sql的問題,若是表名是變量背亥,則需要使用動態(tài)sql秒际,否則不會被解析,但是若只是條件里是變量狡汉,那么直接用變量就可以了娄徊,然后靜態(tài)執(zhí)行。

(9)如果更新的字段加了索引盾戴,更新時會重建索引寄锐,更新效率會慢。

create index index3 on res.temp_gz2and4fundportfolio(port_code,hlddate);
drop index index2



---------------在res中創(chuàng)建一張臨時表后尖啡,再運行下面的程序-------------------
drop table tem_gz4_fund_portfolio
CREATE GLOBAL TEMPORARY TABLE  tem_gz4_fund_portfolio
    (
       PORT_CODE varchar2(20) not null ,                  --產(chǎn)品ID,   主鍵
       HLDDATE DATE not null ,                            --持倉日期
       SEC_CODE varchar2(50),                             --證券代碼  (由證券編碼和證券市場編碼組成)
       SEC_NAME varchar2(50),                             --證券名稱
       SEC_MKT_CODE varchar2(10),                         --證券市場編碼
       MKT_CODE varchar2(10),                                 --交易市場
       MKT_NAME varchar2(50),                              --交易市場名稱 
       SEC_TYPE varchar2(20),                             --證券類別代碼
       SEC_VAR_NAME varchar2(50),                         --證券類別名稱
       CURY_CODE varchar2(3),                             --幣種代碼
       IVT_CLSS varchar2(2),                              --投資分類編碼
       HLD_ATTR varchar2(20),                             --持有屬性
       TD_ATTR varchar2(2),                               --交易屬性編碼
       ML_ATTR varchar2(20),                              --受限流通類別
       HLDAMT number(18,4),                               --持倉數(shù)量
       HLDCST number(18,4),                               --原幣持倉成本
       HLDCST_LOCL number(18,4),                          --本幣持倉成本
       HLDMKV number(18,4),                               --原幣持倉市值
       HLDMKV_LOCL number(18,4),                          --本幣持倉市值
       HLDVVA number(18,4),                               --原幣證券估值
       HLDVVA_L number(18,4),                             --本幣證券估值
       VALPRICE number(18,6),                             --證券估值行情
       VALRATE number(18,15),                             --貨幣估值匯率
       SOURCE1 varchar2(4)                                 --數(shù)據(jù)來源
       --primary key (PORT_CODE) 
    )  ON COMMIT PRESERVE ROWS;
    -- Add comments to the table 
    comment on table tem_gz4_fund_portfolio
      is 'gz2.5和gz4.5整合后的持倉表';

---------------------------遍歷每個套賬號名稱----------------------------
create or replace procedure sp_gz4fundportfolio
as

    v_table_name varchar2(50);                        --2.5的源表名
    v_port_code varchar2(20);                         --基金產(chǎn)品代碼
    v_sql varchar2(32767);
    

    cursor cur_setcode is
    SELECT distinct lpad(t.FSETCODE,3,'0') as FSETCODE
       ,t.FSETID
    FROM sgt25.lsetlist@dblink_gz2 t;


begin
    for cur_id in cur_setcode
    loop
    begin
        v_table_name:='sgt25.'||'a'||cur_id.FSETCODE||'jjhzgzb'||'@dblink_gz2';  --取對應(yīng)的表id
        v_port_code:=cur_id.FSETID;    --取對應(yīng)的產(chǎn)品id

        v_sql:='
        insert into res.tem_gz4_fund_portfolio
        SELECT '||v_port_code||',
          B.Fdate,  
       
          CASE 
          WHEN substr(B.FKmbm,0,8) in (''11010101'',''11010103'',''11010105'',''11010107'',''11010201'',''11010501'',''11010601'') THEN substr(B.FKmbm,-6)||'' SH'' 
          WHEN substr(B.FKmbm,0,8) in (''11010102'',''11010104'',''11010106'',''11010108'',''11010202'',''11010205'',''11010502'',''11010602'') THEN substr(B.FKmbm,-6)||'' SZ''  
          WHEN substr(B.FKmbm,0,8) in (''11010109'',''11010110'',''11010111'',''11010503'') THEN substr(B.FKmbm,-6)||'' HK''  
          WHEN substr(B.FKmbm,0,8) in (''11010203'',''11010204'',''11010603'',''11010604'') THEN substr(B.FKmbm,-6)||'' CY'' 
          ------------基金----------
          WHEN substr(B.FKmbm,0,8)=''11010301'' THEN substr(B.FKmbm,-6)||'' TA''  --中國結(jié)算TA系統(tǒng)
          ------------理財----------
          WHEN substr(B.FKmbm,0,8)in (''11011801'',''11018801'',''11018802'') THEN substr(B.FKmbm,-6)||'' OTC''   
          -----------股指期貨-------
          WHEN substr(B.FKmbm,0,8) in (''31020101'',''31020104'',''31020107'',''31020110'',''31020113'',''31020116'') THEN substr(B.FKmbm,-6)||'' CFX''  
          WHEN length(B.FKmbm)=8 THEN ''000000'' --代表現(xiàn)金存款的證券代碼
          END,      
          
          B.FKMMC,
          
          CASE 
          when length(B.FKmbm)=8 THEN ''000000'' --代表現(xiàn)金的證券市場代碼
          ELSE substr(B.FKmbm,-6) END,
         
          CASE 
          WHEN substr(B.FKmbm,0,8) in (''11010101'',''11010103'',''11010105'',''11010107'',''11010201'',''11010501'',''11010601'') THEN ''XSHG'' --上海證券交易所
          WHEN substr(B.FKmbm,0,8) in (''11010102'',''11010104'',''11010106'',''11010108'',''11010202'',''11010205'',''11010502'',''11010602'') THEN ''XSHE''  --深圳證券交易所
          WHEN substr(B.FKmbm,0,8) in (''11010109'',''11010110'',''11010111'',''11010503'') THEN ''HKCG''  --港股通聯(lián)合市場
          WHEN substr(B.FKmbm,0,8) in (''11010203'',''11010204'',''11010603'',''11010604'') THEN ''XCFE'' --中國銀行間交易市場
          ------------基金----------
          WHEN substr(B.FKmbm,0,8)=''11010301'' THEN ''CSDC''  --中國結(jié)算TA系統(tǒng)
          ------------理財----------
          WHEN substr(B.FKmbm,0,8)in (''11011801'',''11018801'',''11018802'') THEN ''COTC''   --中國柜臺交易市場
          -----------股指期貨-------
          WHEN substr(B.FKmbm,0,8) in (''31020101'',''31020104'',''31020107'',''31020110'',''31020113'',''31020116'') THEN ''CCFX''  --中國金融期貨交易市場
          when length(B.FKmbm)=8 THEN ''other'' 
          END,
          
          CASE  
          WHEN substr(B.FKmbm,0,8) in (''11010101'',''11010103'',''11010105'',''11010107'',''11010201'',''11010501'',''11010601'') THEN ''上海證券交易所'' 
          WHEN substr(B.FKmbm,0,8) in (''11010102'',''11010104'',''11010106'',''11010108'',''11010202'',''11010205'',''11010502'',''11010602'') THEN ''深圳證券交易所''  
          WHEN substr(B.FKmbm,0,8) in (''11010109'',''11010110'',''11010111'',''11010503'') THEN ''港股通聯(lián)合市場''  
          WHEN substr(B.FKmbm,0,8) in (''11010203'',''11010204'',''11010603'',''11010604'') THEN ''中國銀行間交易市場'' 
          ------------基金----------
          WHEN substr(B.FKmbm,0,8)=''11010301'' THEN ''中國結(jié)算TA系統(tǒng)''  
          ------------理財----------
          WHEN substr(B.FKmbm,0,8)in (''11011801'',''11018801'',''11018802'') THEN ''中國柜臺交易市場''   
          -----------股指期貨-------
          WHEN substr(B.FKmbm,0,8) in (''31020101'',''31020104'',''31020107'',''31020110'',''31020113'',''31020116'') THEN ''中國金融期貨交易市場''  
          when length(B.FKmbm)=8 THEN ''其他交易場所'' 
          END,
        ------------------------------------------------------------------------------------
           
          CASE 
          WHEN substr(B.FKmbm,0,6)=''110101'' and substr(B.FKmbm,-6) like ''300___'' THEN ''GP_GP_CYB''  --股票品種_股票_創(chuàng)業(yè)板
          WHEN substr(B.FKmbm,0,6)=''110101'' and substr(B.FKmbm,-6) like ''60____'' or substr(B.FKmbm,-6) like ''900___'' or substr(B.FKmbm,-6) like ''00____'' or substr(B.FKmbm,-6) like ''200___'' THEN ''GP_GP''  --股票品種_股票
          WHEN substr(B.FKmbm,0,6)=''110102'' THEN ''ZQ''  --債券品種
          WHEN substr(B.FKmbm,0,6)=''110103'' THEN ''JJ''  --基金品種
          WHEN substr(B.FKmbm,0,6)=''110115'' THEN ''QQ''  --期權(quán)品種
          WHEN substr(B.FKmbm,0,6) = ''110116'' THEN ''HG''  --回購品種
          WHEN substr(B.FKmbm,0,6) =''110118'' THEN ''LC_YHLC''  --理財品種_銀行理財
          WHEN substr(B.FKmbm,0,6) =''110188'' THEN ''LC_XT''  --理財品種_信托
          WHEN substr(B.FKmbm,0,8) in (''31020101'',''31020104'',''31020107'',''31020110'',''31020113'',''31020116'') THEN ''QH_GZ''  --期貨品種_股指
          WHEN substr(B.FKmbm,0,8) like ''10020___'' THEN ''CK_DQ''  --存放品種_定期
          END,
          
          CASE 
          WHEN substr(B.FKmbm,0,6)=''110101'' and substr(B.FKmbm,-6) like ''300___'' THEN ''股票品種_股票_創(chuàng)業(yè)板''  
          WHEN substr(B.FKmbm,0,6)=''110101'' and substr(B.FKmbm,-6) like ''60____'' or substr(B.FKmbm,-6) like ''900___'' or substr(B.FKmbm,-6) like ''00____'' or substr(B.FKmbm,-6) like ''200___'' THEN ''股票品種_股票''  
          WHEN substr(B.FKmbm,0,6)=''110102'' THEN ''債券品種''  
          WHEN substr(B.FKmbm,0,6)=''110103'' THEN ''基金品種''  
          WHEN substr(B.FKmbm,0,6)=''110115'' THEN ''期權(quán)品種''  
          WHEN substr(B.FKmbm,0,6) = ''110116'' THEN ''回購品種''  
          WHEN substr(B.FKmbm,0,6) =''110118'' THEN ''理財品種_銀行理財''  
          WHEN substr(B.FKmbm,0,6) =''110188'' THEN ''理財品種_信托''  
          WHEN substr(B.FKmbm,0,8) in (''31020101'',''31020104'',''31020107'',''31020110'',''31020113'',''31020116'') THEN ''期貨品種_股指''  
          WHEN substr(B.FKmbm,0,8) like ''10020___'' THEN ''存放品種_定期''  
          END,
          
          ''CNY'',
          '''',
          '''',
          '''',
          '''',
          
          B.FZqsl,
          B.FZqcb,
          B.FZqcb*1 ,
          B.FZqsz ,
          B.FZqsz*1 ,
          
          '''' ,    --原幣證券估值
          '''' ,    --本幣證券估值
          
          CASE FZqsl
          WHEN 0 THEN 0
          ELSE FZqsz/FZqsl  
          END ,
          
          1 ,
          ''GZ25''  
          
          FROM  ( 
          select * from '||v_table_name||' b
          where B.FKmbm like ''11010____%'' or B.FKmbm like ''11011____%'' or B.FKmbm like ''11018____%'' or B.FKmbm like ''31020____%'' or B.FKmbm like ''10020___''
          )B
          order by fdate desc
         '; 
        execute immediate v_sql;      

        commit;
        EXCEPTION WHEN NO_DATA_FOUND THEN
            continue;
    end;
    end loop;


end sp_gz4fundportfolio;

-----------------------------創(chuàng)建好存儲過程后對存儲過程進(jìn)行調(diào)用--------------
call sp_gz4fundportfolio();
select count(1) from res.tem_gz4_fund_portfolio    --用于查看是否執(zhí)行成功
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末橄仆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衅斩,更是在濱河造成了極大的恐慌盆顾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畏梆,死亡現(xiàn)場離奇詭異您宪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)奠涌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門宪巨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溜畅,你說我怎么就攤上這事捏卓。” “怎么了达皿?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵天吓,是天一觀的道長。 經(jīng)常有香客問我峦椰,道長龄寞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任汤功,我火速辦了婚禮物邑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己色解,他們只是感情好茂嗓,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著科阎,像睡著了一般述吸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锣笨,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天蝌矛,我揣著相機(jī)與錄音,去河邊找鬼错英。 笑死入撒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椭岩。 我是一名探鬼主播茅逮,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼判哥!你這毒婦竟也來了献雅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤塌计,失蹤者是張志新(化名)和其女友劉穎惩琉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夺荒,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年良蒸,在試婚紗的時候發(fā)現(xiàn)自己被綠了技扼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嫩痰,死狀恐怖剿吻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情串纺,我是刑警寧澤丽旅,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站纺棺,受9級特大地震影響榄笙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祷蝌,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一茅撞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦米丘、人聲如沸剑令。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吁津。三九已至,卻和暖如春堕扶,著一層夾襖步出監(jiān)牢的瞬間碍脏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工挣柬, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留潮酒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓邪蛔,卻偏偏與公主長得像急黎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子侧到,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容