導航:首頁 > 源碼編譯 > sql語句預編譯失敗

sql語句預編譯失敗

發布時間:2022-12-08 18:15:44

① sqlca.sqlcode = 100是什麼意思

如果一個 SQL 語句發生了錯誤,那麼 sqlca.sqlcode 將是非零值。
如果 sqlca.sqlcode 小於 0 那麼就是發生了某種嚴重的錯誤,象資料庫定義與查詢定義不一致等.
如果大於 0 則是通常的錯誤,象表不包括所要求的行等.
sqlca.sqlcode == 0,成功
sqlca.sqlcode == -1 失敗 (獲取具體失敗信息:messagebox('',"出錯信息:"+sqlca.SQLErrText) )--PB里的操作方法
可能發生的錯誤列表:
-12, Out of memory in line %d.
通常不出現這個錯誤。這是你的虛擬內存耗盡的標志。
-200, Unsupported type %s on line %d.
通常不出現這個錯誤.這表明預編譯器生成了一些庫(函數)不認得的東西.可能你運行的預編譯器和當前庫不兼容.
-201, Too many arguments line %d.
這意味著 Postgres 返回了比我們的匹配變數更多的參數.可能你漏了幾個INTO :var1,:var2-列表裡的宿主變數.
-202, Too few arguments line %d.
這意味著 Postgres 返回了比我們的對應宿主變數要少的參數.可能你多輸入了幾個INTO :var1,:var2-列表裡的宿主變數.
-203, Too many matches line %d.
著意味著查詢返回了多個行,但你聲明的變數不是數組.你執行的 SELECT 可能不是唯一的.
-204, Not correctly formatted int type: %s line %d.
著意味著宿主變數是一個 int 類型並且 Postgres 資料庫里的欄位是另一種類型,包含著一個不能轉換成一個 int 類型的數值.庫(函數)使用 strtol 做此類轉換.

② 預編譯SQL語句的使用問題

void setString(int parameterIndex,
String x)

PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");
pstmt 對象包含語句 "UPDATE table4 SET m = ? WHERE x = ?",它已發送給DBMS,並為執行作好了准備。
2、傳遞 IN 參數
在執行 PreparedStatement 對象之前,必須設置每個 ? 參數的值。這可通過調用 setXXX 方法來完成,其中 XXX 是與該參數相應的類型。例如,如果參數具有java 類型 long,則使用的方法就是 setLong。setXXX 方法的第一個參數是要設置的參數的序數位置,第二個參數是設置給該參數的值。例如,以下代碼將第一個參數設為 123456789,第二個參數設為 100000000:
pstmt.setLong(1, 123456789);
pstmt.setLong(2, 100000000);
一旦設置了給定語句的參數值,就可用它多次執行該語句,直到調用clearParameters 方法清除它為止。在連接的預設模式下(啟用自動提交),當語句完成時將自動提交或還原該語句。
如果基本資料庫和驅動程序在語句提交之後仍保持這些語句的打開狀態,則同一個 PreparedStatement 可執行多次。如果這一點不成立,那麼試圖通過使用PreparedStatement 對象代替 Statement 對象來提高性能是沒有意義的。
利用 pstmt(前面創建的 PreparedStatement 對象),以下代碼例示了如何設置兩個參數佔位符的值並執行 pstmt 10 次。如上所述,為做到這一點,資料庫不能關閉 pstmt。在該示例中,第一個參數被設置為 "Hi"並保持為常數。在 for 循環中,每次都將第二個參數設置為不同的值:從 0 開始,到 9 結束。
pstmt.setString(1, "Hi");
for (int i = 0; i < 10; i++) {
pstmt.setInt(2, i);
int rowCount = pstmt.executeUpdate();
}

③ SQL 語句 最大長度限制 DB2如何修改最大長度限制

<proinsight-br>10/19/2012 10:56:20 0 0 SQL1063N DB2START processing was successful.<proinsight-br>Automatic statement statistics (AUTO_STMT_STATS) = OFFDB2 V9.5 for Linux, UNIX, and Windowsstmtheap - 語句堆大小配置參數此參數指定語句堆的大小,語句堆在編譯 SQL 或 XQuery 語句期間用作 SQL 或 XQuery 編譯器的工作空間。 配置類型資料庫 參數類型可聯機配置 傳播類語句邊界 預設值 [范圍] 對於32 位平台AUTOMATIC [128 - 524288] 帶有本地客戶機和遠程客戶機的資料庫伺服器:預設值為 AUTOMATIC(底層值為 2048)。還可將該參數僅設置為某個固定值。 對於64 位平台AUTOMATIC [128 - 524288] 帶有本地客戶機和遠程客戶機的資料庫伺服器:預設值為 AUTOMATIC(底層值為 8192)。還可將該參數僅設置為某個固定值。註: 在初始創建資料庫後,預設值將由 DB2�0�3 配置顧問程序進行更改。 計量單位頁(4 KB) 分配時間對於預編譯或綁定期間的每個語句 釋放時間當每個語句的預編譯或綁定完成時此區域並不總是處於分配狀態,但要對每個處理的 SQL 或 XQuery 語句進行分配和釋放。注意:對於動態 SQL 或 XQuery 語句,將在程序執行期間使用此工作區; 而對於靜態 SQL 或 XQuery 語句,在綁定進程而不是在程序執行期間使用此工作區。可使用底層值或固定值將 STMTHEAP 參數設置為 AUTOMATIC。該參數設置為 AUTOMATIC 時,底層值會對使用動態連接枚舉為單個編譯分配的內存量加以限制。如果遇到內存限制,語句編譯會使用貪婪連接枚舉和不受限制的語句堆重新啟動。其僅受到剩餘應用程序內存量 (APPL_MEMORY)、實例內存 (INSTANCE_MEMORY) 或系統內存的限制。如果貪婪連接枚舉成功完成,那麼將向應用程序返回一個 SQL0437W 警告。如果貪婪連接枚舉也遇到內存限制,那麼語句預編譯失敗,且帶有 SQL0101N。例如,db2 update db cfg for SAMPLE using STMTHEAP 8192 AUTOMATIC 將為動態連接枚舉設置 8192 *4K (32MB) 的語句堆限制並對貪婪連接枚舉不設限制。當STMTHEAP 參數設置為固定值時,該限制同時適用於動態和貪婪連接枚舉。如果動態連接枚舉遇到內存限制,那麼將使用同一固定語句堆限制來嘗試貪婪連接枚舉。在 AUTOMATIC 情況下,類似的警告/錯誤也適用。例如,db2 update db cfg for SAMPLE using STMTHEAP 8192 將同時為動態和貪婪連接枚舉生成 8192 * 4K (32MB) 的語句堆限制。如果在運行時的查詢性能不夠高,請考慮增大 stmtheap 配置參數值(底層為 AUTOMATIC 的值或固定值),從而確保動態編程連接枚舉能夠成功。如果您更新 stmtheap 配置參數以提高查詢性能,那麼會導致重新編譯語句,以便查詢優化器可以創建新的訪問方案來利用已更改數量的語句堆。註: 僅在優化類 3 和更高級別(預設值為 5)進行動態編程聯合枚舉。<proinsight-br>

④ 如何防範SQL注入漏洞及檢測

以下是OMG我為大家收集整理的文章,希望對大家有所幫助。

SQL注入(SQLInjection)漏洞攻擊是目前網上最流行最熱門的黑客腳本攻擊方法之一,那什麼是SQL注入漏洞攻擊呢?它是指黑客利用一些Web應用程序(如:網站、論壇、留言本、文章發布系統等)中某些存在不安全代碼或SQL語句不縝密的頁面,精心構造SQL語句,把非法的SQL語句指令轉譯到系統實際SQL語句中並執行它,以獲取用戶名、口令等敏感信息,從而達到控制主機伺服器的攻擊方法。

1. SQL注入漏洞攻擊原理

1. 1 SQL注入漏洞攻擊實現原理

SQL(Structured Query Language)是一種用來和資料庫交互的語言文本。SQL注入的攻擊原理就是攻擊者通過Web應用程序利用SQL語句或字元串將非法的數據插入到伺服器端資料庫中,獲取資料庫的管理用戶許可權,然後將資料庫管理用戶許可權提升至操作系統管理用戶許可權,控制伺服器操作系統,獲取重要信息及機密文件。

SQL注入漏洞攻擊主要是通過藉助於HDSI、NBSI和Domain等SQL注入漏洞掃描工具掃描出Web頁面中存在的SQL注入漏洞,從而定位SQL注入點,通過執行非法的SQL語句或字元串達到入侵者想要的操作。下面以一段身份驗證的.NET代碼為例,說明一下SQL 注入攻擊的實現方法。

SqlConnectionnwConn = new SqlConnection((string)ConfigurationSettings.AppSettings["DBconnStrings"]); string queryStr = "SELECT userid,userpwd, username,type FROM users where userid='" + Txtusername.Text +"'";

DataSet userSet = new DataSet();

SqlDataAdapter userAdapter = newSqlDataAdapter(queryStr, nwConn);

userAdapter.Fill(userSet, "Users");

Session["UserID"] =Txtusername.Text.ToString();

Session["type"] =type.Text.ToString();

Response.Redirect("/Myweb/admin/login.aspx");

從上面的代碼中可以看出,程序在與資料庫建立連接得到用戶數據之後,直接將username的值通過session傳給login.aspx,沒有進行任何的過濾和處理措施, 直接用來構造SQL 語句, 其危險系數是非常高的, 攻擊者只要根據SQL 語句的編寫規則就可以繞過身份驗證,從而達到入侵的目的。

1. 2 SQL注入漏洞攻擊分析

SQL注入可以說是一種漏洞,也可以說是一種攻擊。當程序中的變數處理不當,沒有對用戶提交的數據類型進行校驗,編寫不安全的代碼,構造非法的SQL語句或字元串,都可能產生這個漏洞。

例如Web系統有一個login頁面,這個login頁面控制著用戶是否有權訪問,要求用戶輸入一個用戶名和口令,連接資料庫的語句為:

“select * from users where username = 'username' andpassword = 'password'”

攻擊者輸入用戶名為aa or 1=1口令為1234 or 1=1之類的內容。我們可以看出實際上攻擊者並不知道真正的用戶名、口令,該內容提交給伺服器之後,伺服器執行攻擊者構造出的SQL命令,但由於攻擊者輸入的內容非常特殊,所以最後得到的SQL命令變成:

“select * from users where username = 'aa' or 1=1 andpassword = '1234' or 1=1”

伺服器執行查詢或存儲過程,將用戶輸入的身份信息和資料庫users表中真實的身份信息進行核對,由於SQL命令實際上已被修改,存在永遠成立的1=1條件,因此已經不能真正驗證用戶身份,所以系統會錯誤地授權攻擊者訪問。

SQL 注入是通過目標伺服器的80埠進行的,是正常的Web訪問,防火牆不會對這種攻擊發出警告或攔截。當Web伺服器以普通用戶的身份訪問資料庫時,利用SQL注入漏洞就可能進行創建、刪除、修改資料庫中所有數據的非法操作。而當資料庫以管理用戶許可權的身份進行登錄時,就可能控制整個資料庫伺服器。

SQL注入的方法很多,在以手動方式進行攻擊時需要構造各種各樣的SQL語句,所以一般攻擊者需要豐富的經驗和耐心,才能繞過檢測和處理,提交語句,從而獲得想要的有用信息。這個過程需要花費很多的時間,如果以這種手動方式進行SQL注入漏洞攻擊,許多存在SQL注入漏洞的ASP、JSP、PHP、JAVA等網站就會安全很多了,不是漏洞不存在了,而是手動入侵者需要編程基礎,但現在攻擊者可以利用一些現成的黑客工具來輔助SQL注入漏洞攻擊,加快入侵的速度,使SQL注入變得輕而易舉。

由於SQL注入漏洞攻擊利用的是通用的SQL語法,使得這種攻擊具有廣泛性。理論上說,對於所有基於SQL語言的資料庫管理系統都是有效的,包括MSSQLServer、Oracle、DB2、Sybase和MySQL等。當然,各種系統自身的SQL擴展功能會有所不同,因此最終的攻擊代碼可能不盡相同。

1. 3 SQL注入漏洞攻擊過程

(1)繞過身份驗證

如一個login界面,需要輸入用戶名和口令,然後Post到另一個頁面,進行身份驗證,因此攻擊者只需在用戶名和口令的輸入框中都輸入aa or’1’=’1’的內容,那麼攻擊者就可以通過欺騙的驗證方式而直接進入下一個頁面,並擁有和正常登錄用戶一樣的全部特權。原因是什麼呢? 我們比較一下正常用戶登錄和攻擊者登錄時的兩種SQL語句:

1)正常用戶(如用戶名為admin,口令為1234567) :

SQL= " selectfrom users where username = ’admin’and password= ’1234567’ ";

2)攻擊者(用戶名和口令都為aa or’1’=’1’) :

SQL= " select * from users where username='aa or’1’=’1’'and password = ' aa or’1’=’1’'";

可以看到由and連接的兩個條件都被一個永遠成立的1=1所代替,執行的結果為true,資料庫會認為條件恆成立,會返回一個true,讓攻擊者以合法身份登錄進入下一個頁面。

(2)執行非法操作

如一個查詢頁面select1.asp? id=1,編程人員原本設計意圖是顯示id為1的查詢信息,而攻擊者利用程序中沒有對id內容進行檢查的機制,插入自己的代碼。

從select1.asp中摘錄一段關鍵代碼:

SQL= " select *from photo where photoid= 'id'";

可以看到,id沒有進行任何的處理,直接構成SQL語句並執行,而攻擊者在知道該系統資料庫中表名及欄位名的情況下,利用SQL語句特性(分號是將兩句SQL 語句分開的符號),直接向資料庫Tuser表中添加記錄:

select1.asp? id= 1;Insertinto Tuser (username,password,type) values ('hack','1234567','管理員'),然後攻擊者就可以直接用hack進行登錄了。通過這樣的方法,攻擊者還可以對系統做任何的事情,包括添加、刪除、修改系統資源的操作。

(3)執行系統命令

如果Web主機使用MSSQL資料庫管理系統,那麼攻擊者就可以用到xp_cmdshell這個擴展存儲過程,xp_cmdshell是一個非常有用的擴展存儲過程,用於執行系統命令,比如dir、net等,攻擊者可以根據程序的不同,提交不同的語句:

execmaster.dbo.xp_cmdshell " dir "; exec master.dbo.xp_cmdshell" net user hack 1234567 /add ";

execmaster.dbo.xp_cmdshell " net localgroup administrators hack /add ";

這樣就可以向Web主機系統中成功添加了一個管理員帳戶。

2. SQL注入漏洞攻擊的檢測方式及方法

2. 1檢測方式

SQL注入漏洞攻擊檢測分為入侵前的檢測和入侵後的檢測。入侵前的檢測,可以通過手工方式,也可以使用SQL注入漏洞掃描工具軟體。檢測的目的是為預防SQL注入漏洞攻擊,而對於SQL注入漏洞攻擊後的檢測,主要是針對審計日誌的查看,SQL注入漏洞攻擊成功後,會在Web Service和資料庫的審計日誌中留下“痕跡”。

2. 2檢測方法

(1)動態SQL檢查

動態的SQL語句是一個進行資料庫查詢的強大的工具,但把它和用戶輸入混合在一起就使SQL注入成為了可能。將動態的SQL語句替換成預編譯的SQL或者存儲過程對大多數應用程序是可行的。預編譯的SQL或者存儲過程可以將用戶的輸入作為參數而不是命令來執行,這樣就限制了入侵者的行動。當然,它不適用於存儲過程中利用用戶輸入來生成SQL命令的情況。在這種情況下,用戶輸入的SQL命令仍可能得到執行,資料庫仍然存在SQL注入漏洞攻擊的危險。

(2)有效性校驗

如果一個輸入框只可能包括數字,那麼要通過驗證確保用戶輸入的都是數字。如果可以接受字母,檢查是不是存在不可接受的字元,那就需要設置字元串檢查功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。

(3)數據表檢查

使用SQL注入漏洞攻擊工具軟體進行SQL注入漏洞攻擊後,都會在資料庫中生成一些臨時表。通過查看資料庫中最近新建的表的結構和內容,可以判斷是否曾經發生過SQL注入漏洞攻擊。

(4)審計日誌檢查

在Web伺服器中如果啟用了審計日誌功能,則Web Service審計日誌會記錄訪問者的IP地址、訪問時間、訪問文件等信息,SQL注入漏洞攻擊往往會大量訪問某一個頁面文件(存在SQL注入點的動態網頁),審計日誌文件會急劇增加,通過查看審計日誌文件的大小以及審計日誌文件中的內容,可以判斷是否發生過SQL注入漏洞攻擊事件;另外還可以通過查看資料庫審計日誌,查詢某個時間段是否有非法的插入、修改、刪除操作。

(5)其他

SQL注入漏洞攻擊成功後,入侵者往往會添加特權用戶(如:administrator、root、sa等)、開放非法的遠程服務以及安裝木馬後門程序等,可以通過查看用戶帳戶列表、遠程服務開啟情況、系統最近日期產生的一些文件等信息來判斷是否發生過入侵。

3. SQL注入漏洞防範措施

SQL注入漏洞攻擊的防範方法有很多種,現階段總結起來有以下方法:

(1)數據有效性校驗。如果一個輸入框只可能包括數字,那麼要通過校驗確保用戶輸入的都是數字。如果可以接受字母,那就要檢查是不是存在不可接受的字元,最好的方法是增加字元復雜度自動驗證功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。另外限製表單數據輸入和查詢字元串輸入的長度也是一個好方法。如果用戶的登錄名最多隻有10個字元,那麼不要認可表單中輸入10個以上的字元,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。

(2)封裝數據信息。對客戶端提交的數據進行封裝,不要將數據直接存入cookie中,方法就是在編程的代碼中,插入session、if、try、else,這樣可以有效地防止攻擊者獲取cookie中的重要信息。

(3)去除代碼中的敏感信息。將在代碼中存在的用戶名、口令信息等敏感欄位刪除,替換成輸入框。

SQL=" select from users where username = ’admin’and password= ’1234567’ "

如:這樣顯然會暴露管理員的用戶名、口令信息。可以將其修改成:

SQL= " select * from users where username='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'"

這樣就安全了很多,入侵者也是不會輕易的就獲取到用戶名、口令信息。

(4)替換或刪除單引號。使用雙引號替換掉所有用戶輸入的單引號,這個簡單的預防措施將在很大程度上預防SQL注入漏洞攻擊,單引號時常會無法約束插入數據的Value,可能給予輸入者不必要的許可權。用雙引號替換掉單引號可以使大部分SQL注入漏洞攻擊失敗。 如:

“select* from users where username='" + admin + "' and userpwd='" + 1234567+ "'”

顯然會得到與

“select * from users where username='admin' and password= '1234567'”

相同的結果。

(5)指定錯誤返回頁面。攻擊者有時從客戶端嘗試提交有害代碼和攻擊字元串,根據Web Service給出的錯誤提示信息來收集程序及伺服器的信息,從而獲取想得到的資料。應在Web Service中指定一個不包含任何信息的錯誤提示頁面。

(6)限制SQL字元串連接的配置文件。使用SQL變數,因為變數不是可以執行的腳本,即在Web頁面中將連接資料庫的SQL字元串替換成指定的Value,然後將Web.config文件進行加密,拒絕訪問。

(7)設置Web目錄的訪問許可權。將虛擬站點的文件目錄禁止遊客用戶(如:Guest用戶等)訪問,將User用戶許可權修改成只讀許可權,切勿將管理許可權的用戶添加到訪問列表。

(8)最小服務原則。Web伺服器應以最小許可權進行配置,只提供Web服務,這樣可以有效地阻止系統的危險命令,如ftp、cmd、vbscript等。

(9)鑒別信息加密存儲。將保存在資料庫users表中的用戶名、口令信息以密文形式保存,也可以對users表進行加密處理,這樣可以大大增加對鑒別信息訪問的安全級別。

(10)用戶許可權分離。應盡可能的禁止或刪除資料庫中sa許可權用戶的訪問,對不同的資料庫劃分不同的用戶許可權,這樣不同的用戶只能對授權給自己的資料庫執行查詢、插入、更新、刪除操作,就可以防止不同用戶對非授權的資料庫進行訪問。

4. 結束語

SQL注入漏洞攻擊在網上非常普遍,許多ASP、PHP論壇和文章管理系統、下載系統以及新聞系統都存在這個漏洞。造成SQL注入漏洞攻擊的主要原因是開發人員在系統開發的過程中編程不規范,沒有形成良好的編程習慣,問題的解決只有依賴於規范編程。此外,也可以使用現有的SQL注入漏洞掃描器對整個網站中的關鍵代碼進行掃描,查找網站頁面中存在的SQL注入點。對於有問題的頁面,可以及時刪除或更新。本文通過對SQL注入漏洞攻擊的方法、原理以及攻擊實施過程進行了闡述和總結,並給出了一些常見的SQL注入漏洞攻擊防範的方法。

⑤ java預編譯的問題,其中sql語句執行不了,其他插入什麼的都正常,望指點~

pstmt.setString(1,user.getId()+"");
pstmt.setString(2,user.getName());
pstmt.setString(3,user.getPwd());
這是以佔位符方式設置 sql的參數值。
你的sql語句String sql = "select id,name,pwd from userinfo where id=10007";
沒有用到,所以這幾句刪了就行了。或者改為:
String sql = "select id,name,pwd from userinfo where id=?";
pstmt.setString(1,user.getId()+"");

⑥ sql server 2000預編譯問題

預編譯需要設置c編譯器和引用lib的環境變數。給你一個教程看看。
http://www.ccf-dbs.org.cn/idke/xfmeng/course/Introction%20to%20Database%20System/2005ppt/exp3(3)tian%20chao%20huangwei.doc

⑦ 關於嵌入式SQL使用nsqlprep預編譯時出現:fatal error c1083:cannot open source file錯誤。

沒設置好vc的路徑

⑧ 關於預編譯SQL語句 幫忙看一下對不對啊

sql注入怎麼回事:說白了就是在一個單引號上做文章,你把單引號轉義就沒啥問題了,預編譯就是把這些字元轉義後插入,其中包括單引號。

這段可以防止.

⑨ SQL 語句 最大長度限制 DB2如何修改最大長度限制

home/datamart$ db2 get db cfg|grep HEAP
Sort heap thres for shared sorts (4KB) (SHEAPTHRES_SHR) = AUTOMATIC
Sort list heap (4KB) (SORTHEAP) = AUTOMATIC
Database heap (4KB) (DBHEAP) = AUTOMATIC
Utilities heap size (4KB) (UTIL_HEAP_SZ) = 103816
SQL statement heap (4KB) (STMTHEAP) = AUTOMATIC
Default application heap (4KB) (APPLHEAPSZ) = AUTOMATIC
Statistics heap size (4KB) (STAT_HEAP_SZ) = AUTOMATIC

修改 STMTHEAP

P570_B_2:/DATAMART/usr/datamart >db2 update db cfg for datamart using STMTHEAP 20480 AUTOMATIC
DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully.

P570_B_2:/DATAMART/usr/datamart >db2stop force
10/19/2012 10:56:14 0 0 SQL1064N DB2STOP processing was successful.
SQL1064N DB2STOP processing was successful.
P570_B_2:/DATAMART/usr/datamart >db2start
10/19/2012 10:56:20 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.

P570_B_2:/DATAMART/usr/datamart >db2 get db cfg |grep STMT
SQL statement heap (4KB) (STMTHEAP) = AUTOMATIC(20480)
Automatic statement statistics (AUTO_STMT_STATS) = OFF

DB2 V9.5 for Linux, UNIX, and Windows

stmtheap - 語句堆大小配置參數

此參數指定語句堆的大小,語句堆在編譯 SQL 或 XQuery 語句期間用作 SQL 或 XQuery 編譯器的工作空間。

配置類型
資料庫
參數類型
可聯機配置
傳播類
語句邊界
預設值 [范圍]

帶有本地客戶機和遠程客戶機的資料庫伺服器:預設值為 AUTOMATIC(底層值為 8192)。
還可將該參數僅設置為某個固定值。
帶有本地客戶機和遠程客戶機的資料庫伺服器:預設值為 AUTOMATIC(底層值為 2048)。
還可將該參數僅設置為某個固定值。
對於 32 位平台
AUTOMATIC [128 - 524288]
對於 64 位平台
AUTOMATIC [128 - 524288]

註: 在初始創建資料庫後,預設值將由 DB2® 配置顧問程序進行更改。

計量單位
頁 (4 KB)
分配時間
對於預編譯或綁定期間的每個語句
釋放時間
當每個語句的預編譯或綁定完成時

此區域並不總是處於分配狀態,但要對每個處理的 SQL 或 XQuery
語句進行分配和釋放。注意:對於動態 SQL 或 XQuery 語句,將在程序執行期間使用此工作區; 而對於靜態 SQL 或 XQuery
語句,在綁定進程而不是在程序執行期間使用此工作區。

可使用底層值或固定值將 STMTHEAP 參數設置為 AUTOMATIC。該參數設置為 AUTOMATIC 時,底層值會對使用動態連接枚舉為單個編譯分配的內存量加以限制。如果遇到內存限制,語句編譯會使用貪婪連接枚舉和不受限制的語句堆重新啟動。其僅受到剩餘應用程序內存量
(APPL_MEMORY)、實例內存 (INSTANCE_MEMORY) 或系統內存的限制。如果貪婪連接枚舉成功完成,那麼將向應用程序返回一個 SQL0437W 警告。如果貪婪連接枚舉也遇到內存限制,那麼語句預編譯失敗,且帶有
SQL0101N。

例如,db2 update db cfg for SAMPLE using STMTHEAP 8192 AUTOMATIC 將為動態連接枚舉設置
8192 *4K (32MB) 的語句堆限制並對貪婪連接枚舉不設限制。

當 STMTHEAP 參數設置為固定值時,該限制同時適用於動態和貪婪連接枚舉。如果動態連接枚舉遇到內存限制,那麼將使用同一固定語句堆限制來嘗試貪婪連接枚舉。在 AUTOMATIC 情況下,類似的警告/錯誤也適用。

例如,db2 update db cfg for SAMPLE using STMTHEAP 8192 將同時為動態和貪婪連接枚舉生成
8192 * 4K (32MB) 的語句堆限制。

如果在運行時的查詢性能不夠高,請考慮增大 stmtheap 配置參數值(底層為 AUTOMATIC 的值或固定值),從而確保動態編程連接枚舉能夠成功。如果您更新 stmtheap 配置參數以提高查詢性能,那麼會導致重新編譯語句,以便查詢優化器可以創建新的訪問方案來利用已更改數量的語句堆。

註: 僅在優化類 3 和更高級別(預設值為 5)進行動態編程聯合枚舉。

⑩ sql 2000 預編譯問題 如圖,求解答,編譯環境都已設置好,就是不能生成c文件

看不清楚

閱讀全文

與sql語句預編譯失敗相關的資料

熱點內容
堵車如何緩解壓力 瀏覽:15
喜鵲快貸app怎麼了 瀏覽:263
海龜編輯器積木編程怎麼安裝 瀏覽:185
程序員理發店生意怎麼樣 瀏覽:603
程序員羅技 瀏覽:180
軟考初級程序員課程2021下載 瀏覽:491
杭州程序員奶奶 瀏覽:880
不聽命令造成錯誤 瀏覽:981
kool系統源碼 瀏覽:610
流氓app在哪裡看 瀏覽:98
域名購買了怎麼指向伺服器 瀏覽:121
安卓手機如何讓照片顏色反轉 瀏覽:859
怎麼下載卓睿安手機版 瀏覽:514
h3crange命令 瀏覽:468
php前景和python 瀏覽:338
php壓縮圖片內存大小 瀏覽:495
在哪裡可以查看雲伺服器的信息 瀏覽:70
python讀取非txt文件 瀏覽:799
艾莫迅用什麼編程軟體好 瀏覽:227
android文件存儲讀取 瀏覽:214