DB2常用sql語句


DB2 提供了關連式資料庫的查詢語言sql(structured query language),是一種非常口語化、既易學又易懂的語法。此一語言幾乎是每個資料庫系統都必須提供的,用以表示關連式的操作,包含了資料的定義(ddl)以及資料的處理(dml)。sql原來拼成sequel,這語言的原型以"系統 r"的名字在 ibm 聖荷西實驗室完成,經過ibm內部及其他的許多使用性及效率測試,其結果相當令人滿意,並決定在系統r 的技術基礎發展出來 ibm 的產品。而且美國國家標准學會(ansi)及國際標准化組織(iso)在1987遵循一個幾乎是以 ibm sql 為基礎的標准關連式資料語言定義。

一、資料定義 DDL(data definition language)

資料定語言是指對資料的格式和形態下定義的語言,他是每個資料庫要建立時候時首先要面對的,舉凡資料分哪些表格關系、表格內的有什麽欄位主鍵、表格和表格之間互相參考的關系等等,都是在開始的時候所必須規划好的。

1、建表格:

create table table_name(

column1 datatype [not null] [not null primary key],

column2 datatype [not null],

...)

說明:

datatype --是資料的格式,詳見表。

nut null --可不可以允許資料有空的(尚未有資料填入)。

primary key --是本表的主鍵。

2、更改表格 

alter table table_name

add column column_name datatype

說明:增加一個欄位(沒有刪除某個欄位的語法。

alter table table_name

add primary key (column_name)

說明:更改表得的定義把某個欄位設為主鍵。

alter table table_name

drop primary key (column_name)

說明:把主鍵的定義刪除。

3、建立索引 

create index index_name on table_name (column_name)

說明:對某個表格的欄位建立索引以增加查詢時的速度。

4、刪除 

drop table_name

drop index_name

二、DDL的資料形態 datatypes

smallint 16 位元的整數。

interger 32 位元的整數。

decimal(p,s) p 精確值和 s 大小的十進位整數,精確值p是指全部有幾個數(digits)大小值,s是指小數點后有幾位數。如果沒有特別指定,則系統會設為 p=5; s=0 。

float 32位元的實數。

double 64位元的實數。

char(n) n 長度的字串,n不能超過 254。

varchar(n) 長度不固定且其最大長度為 n 的字串,n不能超過 4000。

graphic(n) 和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態是為了支援兩個字元長度的字體,例如中文字。

vargraphic(n) 可變長度且其最大長度為 n 的雙字元字串,n不能超過 2000。

date 包含了 年份、月份、日期。

time 包含了 小時、分鍾、秒。

timestamp 包含了 年、月、日、時、分、秒、千分之一秒。

三、資料操作DML (data manipulation language)

資料定義好之後接下來的就是資料的操作。資料的操作不外乎增加資料(insert)、查詢資料(query)、更改資料(update) 、刪除資料(delete)四種模式,以下分 別介紹他們的語法:

1、增加資料:

insert into table_name (column1,column2,...)

values ( value1,value2, ...)

說明:

1.若沒有指定column 系統則會按表格內的欄位順序填入資料。

2.欄位的資料形態和所填入的資料必須吻合。

3.table_name 也可以是景觀 view_name。

insert into table_name (column1,column2,...)

select columnx,columny,... from another_table

說明:也可以經過一個子查詢(subquery)把別的表格的資料填入。

2、查詢資料:

基本查詢

select column1,columns2,...

from table_name

說明:把table_name 的特定欄位資料全部列出來

select *

from table_name

where column1 = xxx

[and column2 > yyy] [or column3 <> zzz]

說明:

1.''''*''''表示全部的欄位都列出來。

2.where 之後是接條件式,把符合條件的資料列出來。

select column1,column2

from table_name

order by column2 [desc]

說明:order by 是指定以某個欄位做排序,[desc]是指從大到小排列,若沒有指明,則是從小到大排列

組合查詢

組合查詢是指所查詢得資料來源並不只有單一的表格,而是聯合一個以上的表格才能夠得到結果的。

select *

from table1,table2

where table1.colum1=table2.column1

說明:

1.查詢兩個表格中其中 column1 值相同的資料。

2.當然兩個表格相互比較的欄位,其資料形態必須相同。

3.一個復雜的查詢其動用到的表格可能會很多個。

整合性的查詢:

select count (*)

from table_name

where column_name = xxx

說明:查詢符合條件的資料共有幾筆。

select sum(column1)

from table_name

說明:1.計算出總和,所選的欄位必須是可數的數字形態。

2.除此以外還有 avg() 是計算平均、max()、min()計算最大最小值的整合性查詢。

select column1,avg(column2)

from table_name

group by column1

having avg(column2) > xxx

說明:1.group by: 以column1 為一組計算 column2 的平均值必須和 avg、sum等整合性查詢的關鍵字一起使用。

2.having : 必須和 group by 一起使用作為整合性的限制。

復合性的查詢

select *

from table_name1

where exists (

select *

from table_name2

where conditions )

說明:1.where 的 conditions 可以是另外一個的 query。

2.exists 在此是指存在與否。

select *

from table_name1

where column1 in (

select column1

from table_name2

where conditions )

說明:1. in 後面接的是一個集合,表示column1 存在集合里面。

2. select 出來的資料形態必須符合 column1。

其他查詢

select *

from table_name1

where column1 like ''''x%''''

說明:like 必須和後面的''''x%'''' 相呼應表示以 x為開頭的字串。

select *

from table_name1

where column1 in (''''xxx'''',''''yyy'''',..)

說明:in 後面接的是一個集合,表示column1 存在集合里面。

select *

from table_name1

where column1 between xx and yy

說明:between 表示 column1 的值介於 xx 和 yy 之間。

3、更改資料:

update table_name

set column1=''''xxx''''

where conditoins

說明:

1.更改某個欄位設定其值為''''xxx''''。

2.conditions 是所要符合的條件、若沒有 where 則整個 table 的那個欄位都會全部被更改。

4、刪除資料:

delete from table_name

where conditions

說明:刪除符合條件的資料。

說明:關於where條件后面如果包含有日期的比較,不同數據庫有不同的表達式。具體如下:

(1)如果是access數據庫,則為:where mydate>#2000-01-01#

(2)如果是oracle數據庫,則為:where mydate>cast(''''2000-01-01'''' as date)

或:where mydate>to_date(''''2000-01-01'''',''''yyyy-mm-dd'''')

在delphi中寫成:thedate=''''2000-01-01'''';

query1.sql.add(''''select * from abc where mydate>cast(''''+''''''''''''''''+thedate+''''''''''''''''+'''' as date)'''');

如果比較日期時間型,則為:where mydatetime>to_date(''''2000-01-01 10:00:01'''',''''yyyy-mm-dd hh24:mi:ss'''')

 

審校by lei

--------------

1、組合語句執行

BEGIN   ATOMIC

表達式1 分號 空格/回車

表達式2 分號 空格/回車

END

2、應該限制訪問權限的表(應該撤銷這些表PUBLIC SELECT訪問權)

SYSCAT.DBAUTH

SYSCAT.TABAUTH

SYSCAT.PACKAGEAUTH

SYSCAT.INDEXAUTH

SYSCAT.COLAUTH

SYSCAT.PASSTHRUAUTH

SYSCAT.SCHEMAAUTH

比較有用的目錄表

SYSCAT.COLUMNS:包含每一行對應於表或視圖中定義的列

SYSCAT.INDEXCOLUSE:包含每一行包含的所有列

SYSCAT.INDEXES:包含每一行對應於表或視圖中定義的每個索引

SYSCAT.TABLES:所創建每個表,視圖,別名對應其中一行

SYSCAT.VIEWS:所創建每個視圖對應其中一行或幾行

通過索引保持數據唯一性:CREATE UNIQUE INDEX INDEXNAME ON TABLE (COLUMN)

消除重復行:SELECT DISTINCT COLUMN FROM TABLE

3、DB2關於時間的一些函數

得到當前時間的年份、月份、天、小時等等:

YEAR (current timestamp)
MONTH (current timestamp)
DAY (current timestamp)
HOUR (current timestamp)
MINUTE (current timestamp)
SECOND (current timestamp)
MICROSECOND (current timestamp)

分別得到當時的日期和時間

DATE (current timestamp)
TIME (current timestamp)

關於時間的一些計算:

current date + 1 YEAR
current date + 3 YEARS + 2 MONTHS + 15 DAYS
current time + 5 HOURS - 3 MINUTES + 10 SECONDS

計算兩個日期之間有多少天:

days (current date) - days (date(’1999-10-22′))

得到去除毫秒的當前時間:

CURRENT TIMESTAMP - MICROSECOND (current timestamp) MICROSECONDS

將時間轉換成字符串:

char(current date)
char(current time)
char(current date + 12 hours)

將字符串轉換成時間:

TIMESTAMP (’2002-10-20-12.00.00.000000′)
TIMESTAMP (’2002-10-20 12:00:00′)
DATE (’2002-10-20′)
DATE (’10/20/2002′)
TIME (’12:00:00′)
TIME (’12.00.00′)

注意:在DB2的命令編輯器中可以輸入SQL語句和DB2中的內部命令。要想顯示當前時間的話,不能直接輸入current time,這個只能在SQL語言中引用,要想顯示有下面方式:

1) VALUES (current time)

2) SELECT CURRENT TIME FROM SYSIBM.SYSDUMMY1

這個與SQL SERVER2000中不一樣,在SQL SERVER2000中可以輸入Getdate()得到時間,既可以顯示,也可以在語句SQL中用。

4、所有返回前N條數據的表達式

在SQL SERVER2000中使用TOP N 格式

比如: SELECT TOP 10 CARDNO FROM CARD

在DB2中使用fetch first N rows only 格式

比如:SELECT CARDNO FROM SEALCARD fetch first 10 rows only

5、函數使用

查看系統函數: SELECT * FROM SYSibm.sysfunctions;

比如:ABS(-89)可以作為值輸入到SQL中,但是要想在命令編輯器中顯示函數的結果的話可以用下列方式:

1)SELECT ABS(-89) FROM SYSIBM.SYSDUMMY1;

2)VALUES ABS(-89);

6、存儲過程

在進行DB2存儲過程開發時,我們可以利用很多DB2自帶的工具,例如開發中心,控制中心等。但有時使用腳本能帶給開發人員更大的靈活性和更高的工作效率。

在開始開發一個新的或修改一個已存在的存儲過程時,我們通常會進行下面一些准備工作:

1.         查看該存儲過程會用到的表的表結構、字段類型、相關索引和示例數據。

2.         查看相關的存儲過程或用戶自定義函數(UDF)的定義。

3.         查找無效的存儲過程並生成綁定語句。

4.         如某個表發生了改變,查看依賴於該表的所有視圖、存儲過程和用戶自定義函數(UDF)

雖然上述信息都可以通過DB2提供的開發工具和管理工具獲得,但是通過腳本可以更快速的獲得所需信息,並且可以重復執行。

使用腳本完成上述任務的關鍵是理解和使用DB2的系統表。我們先簡單回顧一下有關的DB2的系統表和視圖:

1.         syscat.routines:存儲所有的存儲過程和用戶自定義函數(UDF)信息。其中routinename字段為存儲過程或用戶自定義函數(UDF)的名稱,routinetype字段表示該記錄表示的是存儲過程(P)還是用戶自定義函數(F),lib_id字段為存儲過程編譯后生成的包序列號,origin字段表示該存儲過程或用戶自定義函數的出處(Q表示是由SQL組成的,E表示用戶定義的且是外部的),valid字段表示該存儲過程或用戶自定義函數是否有效,如果origin字段不是Q的話,該域為空。

2.         syscat.packages:存儲所有被綁定的程序包。其中pkgname表示包名稱,valid字段表示該包是否合法。

3.         syscat.packagedep:存儲關於程序包的依賴關系。其中pkgname字段表示程序包名,btype字段表示被依賴對象的類型,bname字段表示被依賴對象的名稱。

4.         syscat.routinedep:存儲關於程序(routine)的依賴關系。其中routinename字段表示程序名,btype字段表示被依賴對象的類型,bname字段表示被依賴對象的名稱。

5.         syscat.viewdep:存儲了關於視圖的依賴關系。其中viewname字段表示視圖名,btype字段表示被依賴對象的類型,bname字段表示被依賴對象的名稱。

回顧並了解了上述系統表和視圖,我們就可以很容易的創建腳本以完成前面提到的開發存儲過程所要做的准備工作。

1. 查看該表結構、字段類型、相關索引和示例數據

雖然我們可以查詢sysibm.systables表獲得表結構,但有一種更簡便的方法來獲取表結構,即使用db2look工具。該工具可以生成創建該表和相關的索引的DDL。如我們要獲取指定數據庫中指定表的結構和前20條數據作為參考,可編寫腳本viewtbl.cmd如下,傳入參數分別為數據庫名和表名。

@echo ------------------ DDL of table %2 and related index(ex) ------------------

@db2look -d %1 -t %2 -e

@echo ------------------ fisrt 20 rows in table %2 ------------------

@db2 select * from %2 fetch first 20 rows only

2.查看已存在的存儲過程和用戶自定義函數(UDF)的定義,將結果存入文件並自動打開結果文件。

可以從syscat.routines表中做簡單查詢實現腳本viewrtn.cmd。

@db2 SELECT text FROM SYSCAT.ROUTINES WHERE ROUTINENAME=upper('%1') > %1.sql

@start %1.sql

3.查看所有無效的存儲過程並生成綁定語句

刪除存儲過程引用的表會引起該存儲過程無效。無效存儲過程可以采用查詢syscat.routines和syscat.packages的方法獲得:

SELECT

    RTRIM(r.routineschema) || '.' || RTRIM(r.routinename) AS spname ,

    RTRIM(r.routineschema) || '.' || 'P'||SUBSTR(CHAR(r.lib_id+10000000),2) AS pkgname

FROM

    SYSCAT.routines r

WHERE

    r.routinetype = 'P'

    AND (

        (r.origin = 'Q' AND r.valid != 'Y')

        OR EXISTS (

            SELECT 1 FROM syscat.packages

            WHERE pkgschema = r.routineschema

            AND pkgname = 'P'||SUBSTR(CHAR(r.lib_id+10000000),2)

            AND valid !='Y'

        )

    )

ORDER BY spname

注意要同時查詢syscat.routines和syscat.packages表,因為在程序包無效時syscat.routines中的valid值仍可能為Y。

如果要自動生成重新綁定語句,只需將上述SQL改寫並存成invalidSP.cmd:

@echo off

db2 "SELECT '@db2 rebind package '|| RTRIM(r.routineschema) || '.' || 'P'||SUBSTR(CHAR(r.lib_id+10000000),2)||' resolve any' FROM SYSCAT.routines r WHERE r.routinetype = 'P' AND ((r.origin = 'Q' AND r.valid != 'Y') OR EXISTS (SELECT 1 FROM syscat.packages WHERE pkgschema = r.routineschema AND pkgname = 'P'||SUBSTR(CHAR(r.lib_id+10000000),2) AND valid !='Y') )" >rebindsp.bat

4.查看某個表所依賴的視圖、存儲過程和用戶自定義函數(UDF)

使用上述系統視圖,我們很容易編寫出腳本:

@echo off

echo --- dependent SPs ---

db2 "select proc.procschema, proc.procname from syscat.routines r, syscat.procedures proc, syscat.packagedep pdep where pdep.bname=upper('%2') and pdep.bschema=upper('%1') and r.specificname=proc.specificname AND pdep.pkgname = 'P'||SUBSTR(CHAR(r.lib_id+10000000),2)"

echo --- dependent UDF ---

db2 select routineschema, routinename from syscat.routinedep where bschema = upper('%1') and bname = upper('%2') and btype ='T' order by bname

echo --- dependent view ---

db2 select viewschema, viewname from syscat.viewdep where bschema = upper('%1') and bname = upper('%2') and btype ='T' order by bname

行業借鑒經驗:提高DB2存儲過程性能和健壯性的3個最佳實踐

最佳實踐1:在創建存儲過程語句中提供必要的參數

創建存儲過程語句(CREATE PROCEDURE)可以包含很多參數,雖然從語法角度講它們不是必須的,但是在創建存儲過程時提供這些參數可以提高執行效率。下面是一些常用的參數:

l         容許SQL(allowed-SQL)

容許SQL(allowed-SQL)子句的值指定了存儲過程是否會使用SQL語句,如果使用,其類型如何。它的可能值如下所示:

NO SQL: 表示存儲過程不能夠執行任何SQL語句。

CONTAINS SQL: 表示存儲過程可以執行SQL語句,但不會讀取SQL數據,也不會修改SQL數據。

READS SQL DATA: 表示在存儲過程中包含不會修改SQL數據的SQL語句。也就是說該儲存過程只從數據庫中讀取數據。

MODIFIES SQL DATA: 表示存儲過程可以執行任何SQL語句。即可以對數據庫中的數據進行增加、刪除和修改。

如果沒有明確聲明allowed-SQL,其默認值是MODIFIES SQL DATA。不同類型的存儲過程執行的效率是不同的,其中NO SQL效率最好,MODIFIES SQL DATA最差。如果存儲過程只是讀取數據,但是因為沒有聲明allowed-SQL類型,它會被當作對數據進行修改的存儲過程來執行,這顯然會降低程序的執行效率。因此創建存儲過程時,應當明確聲明其allowed-SQL類型。

l         返回結果集個數(DYNAMIC RESULT SETS n)

存儲過程能夠返回0個或者多個結果集。為了從存儲過程中返回結果集,需要執行如下步驟:

在CREATE PROCEDURE 語句的DYNAMIC RESULT SETS子句中聲明存儲過程將要返回的結果集的數量。如果這里聲明的返回結果集的數量小於存儲過程中實際返回的結果集數量,在執行該存儲過程的時候,DB2會返回一個警告。

使用WITH RETURN子句,在存儲過程體中聲明游標。

為結果集打開游標。當存儲過程返回的時候,保持游標打開。

在創建存儲過程時指定返回結果集的個數可以幫助程序員驗證存儲過程是否返回了所期待數量的結果集,提高了程序的完整性。

最佳實踐2:對輸入參數進行必要的的檢查和預處理

無論使用哪種編程語言,對輸入參數的判斷都是必須的。正確的參數驗證是保證程序良好運行的前提。同樣的,在DB2存儲過程中對輸入參數的驗證和處理也是很重要的。正確的驗證和預處理操作包括:

如果輸入參數錯誤,存儲過程應返回一個明確的值告訴客戶應用,然后客戶應用可以根據返回的值進行處理,或者向存儲過程提交新的參數,或者去調用其他的程序。

根據業務邏輯,對輸入參數作一定的預處理,如大小寫的轉換,NULL與空字符串或0的轉換等。

在DB2儲存過程開發中,如需要遇到對空(NULL)進行初始化,我們可以使用COALESCE函數。該函數返回第一個非NULL的參數。例如,COALESCE(piName,''),如果變量piName為NULL,那么函數會返回'',否則就會返回piName本身的值。因此,可以用下面的代碼檢查piName是否非NULL並且非空字符串:

SET poGenStatus = 0;                                                   

   SET piName   =RTRIM(COALESCE(piName, ''));

    IF (piName ='')  

    THEN                             

        SET poGenStatus = 34100;     

        RETURN poGenStatus;          

    ENDIF;        

同理,使用COALESCE可以對任何類型的輸入參數進行初始化或驗證。下面是對參數初始化規則的一個總結:

1.       輸入參數為字符類型,且允許為NULL的,如希望缺省值為空字符串,可以使用COALESCE(inputParameter, '')把NULL轉換成空字符串;

2.       輸入類型為整型,且允許為NULL的,如希望缺省值為0,可以使用COALESCE(inputParameter,0),把NULL轉換成0;

3.       輸入參數為字符類型,且不允許是NULL或空字符串的,可以使用RTRIM(COALESCE(inputParameter, ''))把NULL轉換成空字符串,然后驗證函數返回值是否為空字符串;

4.       輸入類型為整型,且不允許是NULL的,不需要使用COALESCE函數,直接使用IS NULL進行驗證。

最佳實踐3:異常(condition)處理

在存儲過程執行的過程中,經常因為數據或者其他問題產生異常(condition)。根據業務邏輯,存儲過程應該對異常進行相應處理或直接返回給調用者。此處暫且將condition譯為異常以方便理解。實際上有些異常(condition)並非是由於錯誤引起的。

當存儲過程中的語句返回的SQLSTATE

===============審校bylei===============

1. 建立數據庫DB2_GCB  

  CREATE DATABASE DB2_GCB ON G: ALIAS DB2_GCB  
  USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM DFT_EXTENT_SZ 32  

  2. 連接數據庫  

  connect to sample1 user db2admin using 8301206  

  3. 建立別名  

  create alias db2admin.tables for sysstat.tables;  
  CREATE ALIAS DB2ADMIN.VIEWS FOR SYSCAT.VIEWS  
  create alias db2admin.columns for syscat.columns;  
  create alias guest.columns for syscat.columns;  

  4. 建立表  

  create table zjt_tables as  
  (select * from tables) definition only;  
  create table zjt_views as  
  (select * from views) definition only;  

  5. 插入記錄  

  insert into zjt_tables select * from tables;  
  insert into zjt_views select * from views;  

  6. 建立視圖  

  create view V_zjt_tables as select tabschema,tabname from zjt_tables;  



  7. 建立觸發器  

  CREATE TRIGGER zjt_tables_del  
  AFTER DELETE ON zjt_tables  
  REFERENCING OLD AS O  
  FOR EACH ROW MODE DB2SQL  
  Insert into zjt_tables1 values(substr(o.tabschema,1,8),substr(o.tabname,1,10))  

  8. 建立唯一性索引  

  CREATE UNIQUE INDEX I_ztables_tabname  
  ON zjt_tables(tabname);  
  9. 查看表  

  select tabname from tables  
  where tabname='ZJT_TABLES';  

  10. 查看列  

  select SUBSTR(COLNAME,1,20) as 列名,TYPENAME as 類型,LENGTH as 長度  
  from columns  
  where tabname='ZJT_TABLES';  

  11. 查看表結構  

  db2 describe table user1.department  
  db2 describe select * from user.tables  

  12. 查看表的索引  

  db2 describe indexes for table user1.department  

  13. 查看視圖  

  select viewname from views  
  where viewname='V_ZJT_TABLES';  

  14. 查看索引  

  select indname from indexes  
  where indname='I_ZTABLES_TABNAME';  



  15. 查看存貯過程  

  SELECT SUBSTR(PROCSCHEMA,1,15),SUBSTR(PROCNAME,1,15)  
  FROM SYSCAT.PROCEDURES;  

  16. 類型轉換(cast)  

  ip datatype:varchar  
  select cast(ip as integer)+50 from log_comm_failed  

  17. 重新連接  

  connect reset  

  18. 中斷數據庫連接  

  disconnect db2_gcb  

  19. view application  

  LIST APPLICATION;  

  20. kill application  

  FORCE APPLICATION(0);  
  db2 force applications all (強迫所有應用程序從數據庫斷開)  

  21. lock table 

  lock table test in exclusive mode  

  22. 共享  

  lock table test in share mode  

  23. 顯示當前用戶所有表  

  list tables  

  24. 列出所有的系統表  

  list tables for system  



  25. 顯示當前活動數據庫  

  list active databases  

  26. 查看命令選項  

  list command options  


  27. 系統數據庫目錄  

  LIST DATABASE DIRECTORY  

  28. 表空間  

  list tablespaces  

  29. 表空間容器  

  LIST TABLESPACE CONTAINERS FOR  
  Example: LIST TABLESPACE CONTAINERS FOR 1  

  30. 顯示用戶數據庫的存取權限  

  GET AUTHORIZATIONS  


  31. 啟動實例  

  DB2START  

  32. 停止實例  

  db2stop  

  33. 表或視圖特權  

  grant select,delete,insert,update on tables to user  
  grant all on tables to user WITH GRANT OPTION  

  34. 程序包特權  

  GRANT EXECUTE  
  ON PACKAGE PACKAGE-name  
  TO PUBLIC  


35. 模式特權  

  GRANT CREATEIN ON SCHEMA SCHEMA-name TO USER  

  36. 數據庫特權  

  grant connect,createtab,dbadm on database to user  

  37. 索引特權  

  grant control on index index-name to user  

  38. 信息幫助 (? XXXnnnnn )  

  例:? SQL30081  

  39. SQL 幫助(說明 SQL 語句的語法)  

  help statement  
  例如,help SELECT  

  40. SQLSTATE 幫助(說明 SQL 的狀態和類別代碼)  

  ? sqlstate 或 ? class-code  

  41. 更改與"管理服務器"相關的口令  

  db2admin setid username password  

  42. 創建 SAMPLE 數據庫  

  db2sampl  
  db2sampl F:(指定安裝盤)  

  43. 使用操作系統命令  

  ! dir  

  44. 轉換數據類型 (cast)  

  SELECT EMPNO, CAST(RESUME AS VARCHAR(370))  
  FROM EMP_RESUME  
  WHERE RESUME_FORMAT = 'ascii'  
45. UDF 

  要運行 DB2 Java 存儲過程或 UDF,還需要更新服務器上的 DB2 數據庫管理程序配置,以包括在該機器上安裝 JDK 的路徑  

  db2 update dbm cfg using JDK11_PATH d:\sqllib\java\jdk  
  TERMINATE  
  update dbm cfg using SPM_NAME sample  

  46. 檢查 DB2 數據庫管理程序配置  

  db2 get dbm cfg  

  47. 檢索具有特權的所有授權名  

  SELECT DISTINCT GRANTEE, GRANTEETYPE, 'DATABASE' FROM SYSCAT.DBAUTH  
  UNION  
  SELECT DISTINCT GRANTEE, GRANTEETYPE, 'TABLE ' FROM SYSCAT.TABAUTH  
  UNION  
  SELECT DISTINCT GRANTEE, GRANTEETYPE, 'PACKAGE ' FROM SYSCAT.PACKAGEAUTH  
  UNION  
  SELECT DISTINCT GRANTEE, GRANTEETYPE, 'INDEX ' FROM SYSCAT.INDEXAUTH  
  UNION  
  SELECT DISTINCT GRANTEE, GRANTEETYPE, 'COLUMN ' FROM SYSCAT.COLAUTH  
  UNION  
  SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SCHEMA ' FROM SYSCAT.SCHEMAAUTH  
  UNION  
  SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SERVER ' FROM SYSCAT.PASSTHRUAUTH  
  ORDER BY GRANTEE, GRANTEETYPE, 3  

  create table yhdab  
  (id varchar(10),  
  password varchar(10),  
  ywlx varchar(10),  
  kh varchar(10));  
  create table ywlbb  
  (ywlbbh varchar(8),  
  ywmc varchar(60))  



48. 修改表結構  

  alter table yhdab ALTER kh SET DATA TYPE varchar(13);  
  alter table yhdab ALTER ID SET DATA TYPE varchar(13);  
  alter table lst_bsi alter bsi_money set data type int;  
  insert into yhdab values  
  ('20000300001','123456','user01','20000300001'),  
  ('20000300002','123456','user02','20000300002');  

  49. 業務類型說明  

  insert into ywlbb values  
  ('user01','業務申請'),  
  ('user02','業務撤消'),  
  ('user03','費用查詢'),  
  ('user04','費用自繳'),  
  ('user05','費用預存'),  
  ('user06','密碼修改'),  
  ('user07','發票打印'),  
  ('gl01','改用戶基本信息'),  
  ('gl02','更改支付信息'),  
  ('gl03','日統計功能'),  
  ('gl04','沖帳功能'),  
  ('gl05','對帳功能'),  
  ('gl06','計費功能'),  
  ('gl07','綜合統計')  

  二. 目錄視圖說明 

說明   目錄視圖  
檢查約束   SYSCAT.CHECKS  
列   SYSCAT.COLUMNS  
檢查約束引用的列  SYSCAT.COLCHECKS   
關鍵字中使用的列  SYSCAT.KEYCOLUSE   
數據類型  SYSCAT.DATATYPES   
函數參數或函數結果  SYSCAT.FUNCPARMS   
參考約束  SYSCAT.REFERENCES   
模式 SYSCAT.SCHEMATA   
表約束  SYSCAT.TABCONST   
表  SYSCAT.TABLES   
觸發器  SYSCAT.TRIGGERS   
用戶定義函數 SYSCAT.FUNCTIONS   
視圖  SYSCAT.VIEWS   

三. 字符串類型 

  二進制大對象 (BLOB) 字符串。  
  字符大對象 (CLOB) 字符串,它的字符序列可以是單字節字符或多字節字符,或這兩者的組合。  
  雙字節字符大對象 (DBCLOB) 字符串,它的字符序列是雙字節字符。  

  四. 數據庫范式 

  第一種規范形式:表中的每一行和每一列均有一個值,永遠不會是一組值。  
  第二種規范形式:不在關鍵字中的每一列提供取決於整個關鍵字的事實。  
  第三種規范形式:每個非關鍵字列提供與其他非關鍵字列無關並只取決於該關鍵字的事實。  
  第四種規范形式:沒有行包含有關一個實體的兩個或更多個獨立的多值事實。  

  五. 數據類型 

數據類型 類型  特性  示例或范圍  
CHAR(15) 定長字符串 最大長度為 254   'Sunny day '  
VARCHAR(15) 變長字符 最大長度為 4000   'Sunny day'  
SMALLINT  數字 長度為 2 字節精度為 5 位  范圍為-32768 至 32767  
INTEGER  數字 長度為 4 字節精度為 10 位  范圍為-2147483648 至 2147483647  
REAL  數字 單精度浮點32 位近似值  范圍為-3.402E+38至-1.175E-37或 1.175E-37 至-3.402E+38或零  
DOUBLE  數字 雙精度浮點64 位近似值 范圍為-1.79769E+308 至-2.225E-307或 2.225E-307 至 1.79769E+308或零  
DECIMAL(5,2) 數字 精度為 5小數位為 2 范圍為 -10**31+1 至 10**31-1  
DATE 日期時間  三部分值 1991-10-27     
TIME 日期時間  三部分值 13.30.05     
TIMESTAMP 日期時間  七部分值   1991-10-27-13.30.05.000000  
六. 列函數  

  列函數對列中的一組值進行運算以得到單個結果值。下列就是一些列函數的示例。  

  AVG  

  返回某一組中的值除以該組中值的個數的和  

  COUNT  

  返回一組行或值中行或值的個數  

  MAX  

  返回一組值中的最大值  

  MIN  

  返回一組值中的最小值  

  七. 標量函數  

  標量函數對值進行某個運算以返回另一個值。下列就是一些由DB2 通用數據庫提供的標量函數的示例。  

  ABS  

  返回數的絕對值  

  HEX  

  返回值的十六進制表示  

  LENGTH  

  返回自變量中的字節數(對於圖形字符串則返回雙字節字符數。)  

  YEAR  

  抽取日期時間值的年份部分 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM