在stored procedure中使用動態SQL

2022-08-27 00:57:12 字數 1734 閱讀 2387

所謂動態sql,是相對靜態sql而言的,靜態sql在編譯的時候就已經知道它的全部內容了。而動態sql指令碼是在編譯的時候還不完整,直到執行過程中才能確定的sql語句。

在db2/400中實現動態sql的方式很多,但一般都採用prepare的方式來實現,下面是在sqlc中實現動態sql的例項:

exec sql begin declare section;

dcl emp char(6);

dcl prj char(6);

dcl search_prj char(6); //真正的查詢條件

dcl act binary fixed(15);

dcl tim dec fixed(5,2);

dcl select_stmt char(200) varying; //定義動態sql字串變數

exec sql end declare section;

select_stmt = .select empno, projno, actno, emptime . ||

.from emp_act . ||

.where projno = ?.; //動態查詢sql..

.exec sql prepare select_prj from :select_stmt; //定義新的sql prepare statement

exec sql declare c1 cursor for select_prj;

exec sql open c1 using :search_prj; //把search_prj的值賦給select_stmt中的『?』

exec sql fetch c1 into :emp, :prjt, :act, :tim;

if sqlstate = .02000. then //查詢到頭

call data_not_found;

else

do while (substr(sqlstate,1,2) = .00.

| substr(sqlstate,1,2) = .01.);

exec sql fetch c1 into :emp, :prj, :act, :tim; //檢索cursor的查詢內容

end;

exec sql close c1;

在store procedure中使用sql的乙個難題就是如何把傳入的變數反映到sql語句中,這裡就必須用到動態sql。

例如:create procedure qgpl/test(in file char(10),in field char(10),inout max_value integer)

language sql

begin atomic

declare stmt varchar(256);

declare not_found condition for 『02000』;

declare continue handler for not_found;

declare c1 dynamic scroll cursor for s1;

set max_value =null;

set stmt=『select '||field||' from '||file || ' order by 1';

prepare s1 from stmt;

open c1;

fetch last from c1 into :max_value;

close c1;

end利用傳入的檔名和欄位名把最大的紀錄值作為傳出引數傳出來。

前端雜燴 在工作,在思考,在沉澱

當我們沉浸在旺盛的需求之中時,整個人便會成為一台工作的機器,切著類似的頁面,寫著同樣的邏輯,重複著昨天或者上個月做的事情,時間久了,覺得膩味,沒有什麼創新,也沒有明顯的成長。用一句通俗的話來講 工作五年,後面四年重複著第一年的活兒。很多人嘗試跳出這個怪圈,不過基於環境壓力和思維受阻,最後又不得不選擇...

前端雜燴 在工作,在思考,在沉澱

當我們沉浸在旺盛的需求之中時,整個人便會成為一台工作的機器,切著類似的頁面,寫著同樣的邏輯,重複著昨天或者上個月做的事情,時間久了,覺得膩味,沒有什麼創新,也沒有明顯的成長。用一句通俗的話來講 工作五年,後面四年重複著第一年的活兒。很多人嘗試跳出這個怪圈,不過基於環境壓力和思維受阻,最後又不得不選擇...

需求在變化,思維在變化

做了這個遠端監控專案,發現開發專案其實相當具有挑戰性的,這種挑戰性主要表現在兩個方面 1 不斷變化的領導需求 或者客戶需求 2 並不熟練甚至並不了解的技術。最近看了一些 瘋狂的程式設計師 還是很羨慕絕影能在大學期間找到自己喜歡的方向,喜歡的事情,把自己喜歡的事情作為自己的工作甚至事業實際上是非常快樂...