#MYSQL#本篇的主要內容是使用檢索來操作sql語句。檢索在資料庫裡面還是使用的很多的。對於提高查詢效率和簡化sql的編寫都起到了很大的作用。具體的看下面的操作。
嵌入式SQL中處理多條記錄的結果集時,採用的是遊標機制。因此,SQL DML語句在嵌入使用時,要注意是否使用了遊標機制。不 需要遊標的SQL DML操作在嵌入式SQL中,不用遊標的SQL DML語句主要包括以下幾種。查詢結果 為單記錄的SELECT語句。非CURRENT形式的UPDATE語句。非CURRENT形式的DELETE語句。INSERT語句。
下面對這幾種語句分別介紹,並通過實例說明其具體使用方法。查詢結果為單記錄的SELECT語句語法如下。EXEC SQL SELECT [ALLIDISTINCT]<目標列表達式>{,<目標列表達式>}INTO<主變量>[<指示變量>]{,<主變量>[<指示變量>]}FROM<表名或視圖名>{,<表名或視圖名>)}[WHERE <條件表達式>]
這裡需要說明的是,該語句對交互式SELECT語句進行了擴充,即多了一一個INTO子句。要求返回的結果最多只能有一-條記錄, 因此不能包括GROUP BY、HAVING 和ORDER BY子句。另外,在INTO子句中可以使用指示變量。當查詢得出的某個數據項為空值時,系統會自動將相應主變量後面的指示變量置為負值(-般為-1),但不向該主變量執行賦值操作,即
主變量值仍保持執行SQL語句之前的值。當我們發現指示變量值為負值時,不管主變量為何值,均應認為主變量值為NULL.
如果資料庫中沒有滿足條件的記錄,即查詢結果為空,那麼DBMS將SQLCODE的值置為100。當查詢結果為多條記錄時,程序將出錯,DBMS會在SQLCA中返回錯誤信息。實例6嵌入式SQL中使用查詢結果為單記錄的SELECT語句在TEACHER表中查詢教工號為5的教師的姓名、年齡信息,將其值賦予主變量teacher_ name 和age.示例代碼如下SELECT TNAME ,AGE INTO :teacher_ name ,age FROM TEACHER WHERE TNO = 5;teacher_ name、 age 均是主變量,並假定均已在前面的程序中說明過了。
在TEACHER表中,教工號為5的記錄只有一行,因此該SELECT語句的查詢結果為單記錄。從提高應用程式的數據獨立性角度考慮,SELECT 語句在任何情況下都應該使用遊標。雖然對於僅返回一行結果數據的SELECT語句可以不使用遊標,但如果以後資料庫說明.改變了,該SELECT語句可能會返回多行數據,這時該語句就會出錯。.非CURRENT形式的UPDATE語句
所謂非CURRENT形式的UPDATE語句,是指執行UPDATE操作時,所有滿足更新條件的記錄都進行更新,而不是一行一行地單獨更新。 語法與交互式UPDATE語句完全相同,只是在SET子句和WHERE子句中可以使用主變量,在SET子句中還可以使用指示變量。實例7嵌入式 SQL中使用非CURRENT形式的UPDATE語句將TEACHER表中所有男教師增加若干工資,假設增加的工資已賦給主變量Raise。示例代碼如下。 UPDATE TEACHER SET SAL- SAL+ :Raise WHERE TSEX=' 男';與返回單一值得SELECT語句不同,非CURRENT形式的UPDATE語句可以操作多條元組。在該例中,所有男教師的記錄都將被更新。