日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

DB2 V9.5版本中數據庫應用程序移植的改進

瀏覽:42日期:2023-11-09 08:16:54
版本9.5中改進的應用程序可移植性增加了與現有代碼的兼容性,并且不再需要遷移使用其他供應商的數據庫的應用程序。版本 9.5 包含以下增強功能:

• 支持在過程和調用過程的應用程序中使用 ARRAY 數據類型。

• 支持全局變量。全局變量是已命名的內存變量,您可以通過 SQL 語句訪問和修改此變量。版本 9.5 支持已創建的會話全局變量,這些變量與特定會話相關聯并包含該會話獨有的值。

• 支持其他供應商的 SQL 方言。版本 9.5 包含對 DECODE、NVL、LEAST 和 GREATEST 函數的支持。

數組數據類型

在以前的DB2版本,碰到數據集合處理的程序移植,我們只能通過臨時表或游標來處理,這是非常麻煩的。

版本 9.5 支持 ARRAY 集合數據類型。您可以在存儲過程和應用程序中對它們進行處理,此功能使從其他數據庫供應商移植已支持數組的應用程序和存儲過程更容易。

您可以使用數組以在應用程序與存儲過程之間更有效率地傳遞數據以及存儲和處理 SQL 過程中的瞬態數據集合,而不必使用關系表。SQL 過程中可用的數組運算符允許更有效率地存儲和檢索數據。

版本 9.5 中對數組數據類型的支持允許您執行以下操作:

• 根據數組創建用戶定義的類型;例如,CREATE TYPE INT10 AS INTEGER ARRAY[10] 定義最多 10 個整數值的數組的類型;

• 在存儲過程和應用程序中聲明數組類型的變量和參數;

• 創建和處理數組值,數組處理的基本部分包括數組構造方法、設置子下標、元素計數和整理;

• 在 JDBC 和 CLI 應用程序與 SQL 和 Java 存儲過程之間來回傳遞數組;

• 將數組轉換為表(每個表行一個數組元素)以及將聚集列轉換為數組,以便更容易在數組與 SQL 之間通過接口進行連接;

• 使用輸入和輸出數組參數從命令行處理器調用過程。

ARRAY 數據類型定義:

CREATE TYPE type-name AS data-type ARRAY [integer-constant]

其中:data-type 不支持LONG VARCHAR, LONG VARGRAPHIC, LOB, XML類型, integer-constant 最大值2147483647

與ARRAY相關的函數:

ARRAY_AGG 將行數據集聚集成數組

UNNEST 將數組數據轉成行數據

CARDINALITY 返回數組中的元素號,類型 BIGINT

MAX_CARDINALITY 返回數組中所含的最大元素號,類型 BIGINT

注意,這些函數只用于SQL procedure

SELECT T.PHONE, T.ID, T.INDEX FROM UNNEST(PHONES, IDS)

WITH ORDINALITY AS T(PHONE, ID, INDEX)

ORDER BY T.INDEX

Example 1

這個例子包含2個存儲過程, sum 和 main. 存儲過程 main 建立一個含有6個元素(integer)的數組。傳遞這個數組給存儲過程sum, 計算出所有元素值的和并返回給調用存儲過程 main. 存儲過程 sum 說明了array subindexing 和CARDINALITY 函數的用法.

create type intArray as integer array[100] @

create procedure sum(in numList intArray, out total integer)

begin

declare i, n integer;

set n = CARDINALITY(numList);

set i = 1;

set total = 0;

while (i < n) do

set total = total + numList[i];

set i = i + 1;

end while;

end @

create procedure main(out total integer)

begin

declare numList intArray;

set numList = ARRAY[1,2,3,4,5,6];

call sum(numList, total);

end @

Example 2

這個例子,我們使用2個數組類型(intArray 和 stringArray),使用一個包含列(id 和 name)的 persons 表。 存儲過程 processPersons 添加3個人到 persons表, 并返回person名字的數組,按id排序,名字中包含字母 'o'。 3個persons 的 id 和 name 作為數組元素(ids 和 names)添加到數組中。這些數組使用UNNEST 函數,將數組數據以包含2列數據的表的表達形式表達,并插入到persons 表中。最后使用ARRAY_AGG函數將數據匯集返回給輸出參數。

create type intArray as integer array[100] @

create type stringArray as varchar(10) array[100] @

create table persons (id integer, name varchar(10)) @

insert into persons values(2, 'Tom') @

insert into persons values(4, 'Jill') @

insert into persons values(1, 'Joe') @

insert into persons values(3, 'Mary') @

create procedure processPersons(out witho stringArray)

begin

declare ids intArray;

declare names stringArray;

set ids = ARRAY[5,6,7];

set names = ARRAY['Bob', 'Ann', 'Sue'];

insert into persons(id, name) (select T.i, T.n from UNNEST(ids, names) as T(i, n));

set witho = (select array_agg(name order by id)

from persons

where name like '%o%');

end @

Example 3

這個例子說明在java代碼中如何調用含有數組參數的存儲過程,本例子中存儲過程bonus_calculate含有2個輸入參數,一個是數組projs,一個是整形percentage

………

String sql = 'CALL bonus_calculate(?, ?)';

CallableStatement callStmt = con.prepareCall(sql);

// Create an SQL Array

projects[0] = 'AD3111';

projects[1] = 'IF1000';

projects[2] = 'MA2111';

java.sql.Array projectArray=con.createArrayOf('VARCHAR',projects);

// set IN parameters

callStmt.setArray(1, projectArray);

callStmt.setInt(2,percentage);

// call the procedure

callStmt.execute();

…………

CREATE PROCEDURE bonus_calculate (IN projs projects, IN percentage integer)

BEGIN

DECLARE emp_array employees;

DECLARE bonus_array bonus;

SELECT cast(array_agg(employee.empno) AS employees),

cast(array_agg(.10*salary) AS bonus) INTO emp_array,bonus_array

FROM vempprojact, unnest(projs) AS P(id), employee

WHERE P.id=vempprojact.projno AND employee.empno=vempprojact.empno;

INSERT INTO bonus_temp

SELECT T.empno, T.bonus

FROM unnest(emp_array, bonus_array)

WITH ORDINALITY AS T(empno,bonus, idx);

END@

全局變量

在以前的DB2版本,碰到含全局變量處理的移植程序移植,我們只能通過全局臨時表來處理,使用起來非常麻煩。

全局變量改進了 SQL 語句之間的數據共享。版本 9.5 引入了全局變量的概念,它們是命名的內存變量,可以通過 SQL 語句訪問和修改這些變量。全局變量使您能夠在運行于同一會話(或連接)的不同 SQL 語句之間共享數據,而不需要應用程序邏輯來支持此數據傳輸。

應用程序不再需要發出這種語句來將值從一個語句的輸出自變量(如主機變量)復制到另一個語句的輸入自變量。此外,包含在數據庫系統本身中的 SQL 語句(如定義觸發器和視圖的語句)現在可以訪問此共享信息。

全局變量有助于您為數據庫本身中的數據傳輸實現更復雜的交互式模型,以便您不必在應用程序或 SQL 過程中放置支持邏輯。與全局變量相關聯的已定義特權確保所傳送數據的安全性不會升高到強制通過應用程序邏輯。如果安全性存在問題,那么您可以通過 GRANT 和 REVOKE 語句來控制對全局變量的訪問。

存儲靜態的、在會話期間很少更改的或者進行了管理控制的數據時,全局變量特別有用。用于將警報發送至 DBA 的尋呼機號以及指示是啟用還是禁用某些觸發器的指示器就是這種數據的示例。

版本 9.5 支持已創建的會話全局變量。會話全局變量與特定會話相關聯并包含該會話獨有的值。已創建的會話全局變量可用于任何正在您定義該變量的數據庫上運行的活動 SQL 語句。系統目錄包含已創建的會話全局變量的定義以及與這些全局變量相關聯的特權。

例子:

創建全局變量:

CREATE VARIABLE myjob_current varchar (10) DEFAULT ('soft-engg');

獲取全局變量信息:

SELECT substr (varschema, 1, 10) as varschema,

substr (varname, 1, 10) AS varname,

varid, substr(owner,1,10) AS owner,

ownertype, create_time,

substr(typeschema,1,10) AS typeschema,

substr(typename,1,10) AS typename, length

FROM syscat.variables

WHERE varname = 'MYJOB_CURRENT';

給用戶praveen 和 sanjay 讀和寫權限,剝奪用戶sanjay寫權限:

GRANT READ, WRITE ON VARIABLE myjob_current TO USER praveen, USER sanjay;

REVOKE WRITE ON VARIABLE myjob_current FROM USER sanjay;

獲取用戶 praveen 和 sanjay 的全局變量權限信息:

SELECT substr (varschema, 1, 10) AS schema,

substr (varname, 1, 10) AS name,

substr(grantor,1,10) AS grantor, grantortype AS Rtype,

substr(grantee,1,10) AS grantee, granteetype AS Etype,

readauth, writeauth

FROM syscat.variableauth

WHERE varname ='MYJOB_CURRENT'; ]

在觸發器中使用全局變量,本例是設計一個disable觸發器示例:

CREATE VARIABLE disable_trigger char (1) DEFAULT ('N');

CREATE TRIGGER validate_t BEFORE INSERT ON EMPLOYEE

REFERENCING NEW AS n FOR EACH ROW

WHEN (disable_trigger = 'N' AND n.empno > '10000')

SIGNAL SQLSTATE '38000'

SET message_text = 'EMPLOYEE NUMBER TOO BIG and INVALID';

SET disable_trigger = 'Y'; 使觸發器失效

簡化用戶權限檢索:

CREATE VARIABLE schema1.gv_workdept CHAR

DEFAULT ((SELECT workdept FROM employee

WHERE firstnme = SESSION_USER));

CREATE VIEW schema1.emp_filtered AS

SELECT * FROM employee

WHERE workdept = schema1.gv_workdept;

在存儲過程,嵌入C,java程序中都可使用全局變量。

新的函數

新的函數簡化了應用程序移植,版本 9.5 包含一些與其他數據庫供應商使用的標量函數同名的新標量函數。當您將現有應用程序移植到版本 9.5 中時,您可以繼續使用其他供應商使用的函數名稱,而無需更改代碼。

提供了以下新的標量函數:

• NVL(現有的 COALESCE 和 VALUE 函數的同義詞)

• LEAST 或 MIN(互為同義詞)

• GREATEST 或 MAX(互為同義詞)

• DECODE(類似于現有的 CASE 表達式)

標簽: DB2 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲国产日韩欧美在线| 99久久婷婷| 在线亚洲免费| 91亚洲国产| 日韩成人精品一区| 精品一区二区三区视频在线播放| 91精品99| 日韩午夜一区| 欧美二区视频| 黄色av一区| 亚洲激情黄色| 91久久视频| 日韩在线一区二区| 亚洲资源在线| 日韩高清一区在线| 日韩av不卡一区二区| 欧美日本久久| 国内精品伊人| 国产成人精品免费视| 免费亚洲婷婷| 亚洲精品88| 国户精品久久久久久久久久久不卡| 日韩精品专区| 在线一区电影| 日本国产亚洲| 捆绑调教美女网站视频一区| 国产aⅴ精品一区二区四区| 日韩精品诱惑一区?区三区| 91精品一区国产高清在线gif| 女主播福利一区| 日本亚洲欧美天堂免费| 国产精品地址| 欧美二区视频| 五月亚洲婷婷 | 亚洲不卡av不卡一区二区| 99国产精品久久久久久久成人热| 亚洲精品乱码久久久久久蜜桃麻豆 | 91精品一区二区三区综合在线爱| 中文欧美日韩| 精品国产乱码久久久| 欧美另类专区| 国产麻豆精品| 亚洲深爱激情| 97精品国产| 日本欧美一区二区| 日韩精品免费一区二区在线观看 | 国产精品一区二区三区www| 国产伦久视频在线观看| 蜜臀av在线播放一区二区三区| 国产情侣一区在线| 亚洲色诱最新| 久久精品国产亚洲aⅴ| 免费人成精品欧美精品| 日韩精品一区二区三区免费观影| 日韩欧美久久| 每日更新成人在线视频| 日韩在线短视频| 久久精品国产精品亚洲毛片| 亚洲三级av| 制服诱惑一区二区| 久久久精品久久久久久96| 精品午夜av| 国产精品白丝av嫩草影院| 亚洲日本欧美| 综合激情婷婷| 亚洲永久字幕| 日韩在线看片| 久久成人高清| 国产精品www.| 国产精品片aa在线观看 | 97精品在线| 热三久草你在线| www.com.cn成人| 日韩欧美三级| 久久激情网站| 美女网站一区| 老鸭窝亚洲一区二区三区| 亚洲免费成人| 男女性色大片免费观看一区二区| 亚洲精品中文字幕乱码| 成人久久一区| 亚洲欧美高清| 日韩av在线免费观看不卡| 日本精品在线播放| 久久伊人亚洲| 天堂日韩电影| 综合干狼人综合首页| 欧美色综合网| 97国产成人高清在线观看| 欧美日韩精品免费观看视欧美高清免费大片| 九九久久国产| 国内精品福利| 视频一区日韩| 欧美羞羞视频| 日韩在线观看一区二区| 蜜臀精品一区二区三区在线观看 | 日韩电影免费网址| 老鸭窝毛片一区二区三区| 久久国产99| 久久中文字幕一区二区| 不卡在线一区二区| 青草国产精品| 精精国产xxxx视频在线野外| 丝袜美腿亚洲一区二区图片| 精品国产第一福利网站| 一区免费在线| 欧美亚洲专区| 欧美一区久久久| 日韩国产欧美一区二区| 蜜桃久久久久| 亚洲资源网站| 99re国产精品| 91精品国产91久久久久久黑人| 国产亚洲第一伦理第一区| 一区二区亚洲精品| 免费看av不卡| 精品丝袜久久| 91亚洲无吗| 婷婷成人av| 狠狠操综合网| 欧美精选视频一区二区| 精品一区二区三区在线观看视频| 日韩综合一区二区| 爽好多水快深点欧美视频| 久久99高清| 精品国产不卡| 成人在线黄色| 精品精品久久| 精品美女视频 | 97人人精品| 国产精品伦一区二区| 免费日韩视频| 石原莉奈在线亚洲三区| 午夜一级在线看亚洲| 在线综合亚洲| 日韩中文字幕av电影| 日韩制服丝袜av| 婷婷亚洲精品| 国产日产高清欧美一区二区三区| 少妇高潮一区二区三区99| 日韩精品欧美大片| 日韩av一区二| 国产91在线播放精品| 欧美13videosex性极品| 婷婷六月综合| 免费不卡在线观看| 伊人国产精品| 久久精品99国产精品| 国产一区二区三区久久| 激情久久久久久久| 视频一区二区中文字幕| 日韩国产欧美一区二区三区| 国产精品久久久久77777丨 | 三级在线观看一区二区 | 五月天久久久| 日韩精品一区二区三区中文| 麻豆精品久久| 国产韩日影视精品| 日韩在线一区二区| 免费亚洲婷婷| 亚洲免费网址| 高清久久一区| 亚洲男人在线| 92国产精品| 日韩不卡免费视频| 午夜久久福利| 国产盗摄——sm在线视频| 蜜桃一区二区三区在线| 韩国一区二区三区视频| 蜜臀精品久久久久久蜜臀| 亚洲黄色免费av| 国产人成精品一区二区三| 欧美日韩黑人| 黑森林国产精品av| 蜜桃久久久久久| 亚洲天堂成人| 精品视频一区二区三区在线观看 | 国产a亚洲精品| 亚洲日本在线观看视频| 久久久久国产| 久久久精品国产**网站| 亚洲三级网址| 午夜久久美女| 婷婷激情一区| 国产成人久久| 日韩av中文字幕一区二区| 亚洲电影在线一区二区三区| 国产成人77亚洲精品www| 国产麻豆精品| 久久国产人妖系列| 日本欧美一区二区在线观看| 国产视频久久| 91久久亚洲| 国产精品美女| 色婷婷久久久| 中日韩男男gay无套| 亚洲免费黄色| 欧美日韩四区| 伊人成人在线视频| 夜夜嗨一区二区三区|