DB2經常使用sql語句

java

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

1、資料定義 DDL(data definition language)程序員

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

1、建表格:數據庫

create table table_name(編程

column1 datatype [not null] [not null primary key],服務器

column2 datatype [not null],oracle

...)app

說明:編程語言

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

2、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 包含了 年、月、日、時、分、秒、千分之一秒。

3、資料操做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

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

一、組合語句執行

BEGIN   ATOMIC

表達式1 分號 空格/回車

表達式2 分號 空格/回車

END

二、應該限制訪問權限的表(應該撤銷這些表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

三、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中用。

四、全部返回前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

五、函數使用

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

好比:ABS(-89)能夠做爲值輸入到SQL中,可是要想在命令編輯器中顯示函數的結果的話能夠用下列方式:

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

2)VALUES ABS(-89);

六、存儲過程

在進行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    抽取日期時間值的年份部分 

相關文章
相關標籤/搜索