DB2基本問題總結

DB2基本問題總結

 

²        連接數據庫

db2 => connect to bidb_dev user UID using PASSWORD

C:/ db2 connect to bidb_dev user UID using PASSWORD

要隱藏密碼,就:

C:/ db2 connect to bidb_dev user UID 回車

密碼  回車

²        數據查詢:

1select * from tableName;

2、表關連:

內連接,外連接

外連接有3種,左關聯,右關聯,完全連接

左關聯,

Select T1.*

FROM CORINFO.RV_ISTRSSTS T1

LEFT OUTER JOIN SESSION.TAB_CUTCOD T2 ON T1.CUT_COD = T2.CUT_COD      LEFT OUTER JOIN CORDIM.CM_CRYRAT T3 ON T1.CR_CCY = T3.CRY_NUM                                                              AND T1.EYDT = T3.EYDT

LEFT OUTER JOIN SESSION.TAB_BRNCOD T4 ON T1.BRN_NBR = T4.DEP_NBR

完全連接:

Select T1.*

FROM CORINFO.RV_ISTRSSTS T1

FULL OUTER JOIN SESSION.TAB_CUTCOD T2 ON T1.CUT_COD = T2.CUT_COD    

3、把表內關連放進where語句,和條件是一樣的

3、在列裏的條件選擇:

select (CASE WHEN T1.EYDT >= v_BeginLastYear

                              AND T1.EYDT <= v_NowLastYear

                              AND T1.CR_CCY <> '21' 

                           AND T1.CR_CCY <> '32'                 

                     THEN T1.CR_AMT*T3.CON_USD ELSE 0 END) from Tab_Nname ;

Case when 可以嵌套,相當於Oracle 裏的Decode, SqlServer裏也有 Case When用法一樣;他是在數據被查詢出來後,進行計算;

4、只查詢幾行:

有時候需要,只返回一行,或者只需要返回10行,這樣做:

select * from TabName FETCH FIRST 12 ROWS ONLY ; 這樣就會只返回前12行

5、排名:

   查詢類似排名,得問題:

SELECT ROW_NUMBER() OVER() AS "排名" from TAB_NAME;

6、爲空字段的處理:

爲空的字段是不能比較的,下面的寫法是錯誤的:

Select * from Tab_name where c1 = NULL;

要用 Select * from Tab_name where c1 is NULL;

如果,要爲空則等於一個默認值的話,可以這樣:

Select case when Cl is NULL then 250 end from TAB_name;

有一個現成的函數供使用:

COALESCE(T1.MOD_NBR,0)   他的含義是,如果T1.MOD_NBR,不爲空,則結果是T1.MOD_NBR,否則爲0;這對於Sum()函數求和是非常有用的;否則會因爲有一條數據爲空,只是返回的結果,都爲空;因爲任何數 + ,都是空;

還可以寫成Value(T1.MOD_NBR,0) , 也就是說COALESCE(T1.MOD_NBR,0) = Value(T1.MOD_NBR,0)

但據我個人經驗,這種處理,效率很低,儘量不要用;

²        數據增刪改:

    UPDATE TAB_CUTCOD

        SET CAL_FLG = 'Y'

    WHERE CUT_COD = ‘0’;

 

INSERT INTO TAB_PRDSGM VALUES('000',-1,0), ('001',20,1), ('002',-3,2);

 

    Delete from TAB_CUTCOD where condition

好像這樣也行:  

Delete TAB_CUTCOD where condition

²        表的相關操作:

建表語句:

drop table AdBaseInfo;

Create table AdBaseInfo

(

    ADID            CHAR(16) NOT NULL,

    ACT_SQNO        CHAR(5) NOT NULL,

    Rctime          timestamp default currenttime,   

    primary key (ADID)

)

IN INDADV

    INDEX IN IDX_INDADV

PARTITIONING KEY(ADID);   -- 什麼是PARTITION 在講效率問題時講;

 

comment on table AdBaseInfo               is '基本信息表';

comment on column AdBaseInfo.ADID         is '標識';

 

其他選項:

NOT LOGGED – 不記錄日誌,也不能會滾;

 

刪除表:

Drop Table TableName;

 

清空表:

DB2,沒有像Oracle等數據庫的Trancat 語句,但可以用C語言寫一個函數,新建一個文件,用空文件,覆蓋掉原有文件,就起到了同樣的效果;

 

查找存儲過程的源碼:

describe table sysibm.sysPROCEDUREs

 select * from sysibm.sysPROCEDUREs where PROCSCHEMA = 'RB_CRM'

 

 

²        其他傻瓜問題FAQ

1、執行文件命令:

例如建表語句,批處理等命令,寫進一個文件,寫好了後,統一執行

db2 –td@ -f   rb_query.db2
說明:rb_query.db2是命令文件, -f 表示是命令文件, -td; 表示文件每個命令之間用分號分開,也可以是db2 –td@ -f   rb_query.db2 ,這樣rb_query.db2 美革命的結束標誌就是:@

2、錯誤編碼的查詢:

數據經常會報錯,但錯誤,之多,你也搞不清楚是什麼錯,這個時候就會用到錯誤碼,

DB2的錯誤碼有2種表達方式:SQLSTATE 和 SQLCODE,他們編碼不同,他們是一一對應的,查詢具體錯誤碼的含義:

例如:SQLSTATE,是 12345 ,SQLCODE是 987

SQLSTATE : C:/> DB2 ? 23505

SQLCODE = -803,    C:/> Db2 ? SQL0803 -- 注意前邊加上 SQL,並且補0

3、查當前用戶所有的表
SELECT * FROM SYSIBM.SYSTABLES WHERE CREATOR='PBLTZ'
有時候上邊這句不好用,就用下邊這句:
list tables for schema pbltz
4、查當前用戶所有的View
select * from sysibm.sysviews WHEREC CREATOR='PBLTZ'
5、查當前的表結構
describe table table_name
describe select * from table_name
6、DB2的數據類型
select * from sysibm.SYSDATATYPES
7、如何知道表的字段的狀況?
select * from sysibm.SYSCOLUMNS WHERE TBNAME='TAB_BBK'
8、日期常量
'01-02-2002'  ,('01-02-2002'),to_date('01-02-2002'),date('01-02-2002')

9.取當前時間?
  SELECT CURRENTTIMESTAMP FROM SYSIBM.SYSDUMMY1

select * from SCHEMA

10、默認的空表,類似於Oracle 的Dual
select sysdate from Dual;
用Db2就是: Select current timestamp from sysibm.sysdummy1;
11、連接2個字符字段:
Select emp_no||emp_nam from db2admin.bsempms;
select emp_no concat emp_nam from db2admin.bsempms;

 

12、只取前10行 select * from tbl fetch first 10 rows only;

13、truancate 表:alter table table_name active not logged initially with empty table

14、查看錶空間的使用狀況: list tablespace containers for 你的表空間號 show detail

 

list tablespace containers for 1 show detail

list tablespaces show detail 全部
15、增加表空間:ALTER TABLESPACE RISK_DATA_1 ADD(FILE '/db2inst1/risk/data3.dat' 25000) –是以4K爲單位的,實際上是增加了1G

 

16、列舉機器的數據源:db2 list user ODBC data sources

17、連接遠程數據庫:

db2 catalog TCPIP NODE runnode remote 99.1.57.23 server 50000

db2   catalog db calldb as calldb2 at node runnode

connect to calldb2 user .. using ..

18、本地已經連接的節點  list node directory
  RUNSTATS ON TABLE <table-name>
      ON ALL COLUMNS WITH DISTRIBUTION AND
      DETAILED INDEXES ALL
      ALLOW READ ACCESS

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章