嵌入式csql
『壹』 嵌入式sql的預處理方式是指
嵌入式sql的預處理方式是指把嵌入的SQL語句處理成函數調用形式。嵌入式SQL實現時,採用預處理方式是識別出SQL語句,並處理成函數調用形式,嵌啟虧入式SQL是一種將蠢或SQL語句直接寫入C語言,COBOL,FORTRAN,Ada編程語言的源代碼中的方悄檔神法。
『貳』 第三十四章 SQL函數 CURDATE
返回當前本地日期的標量日期/時間函數。
CURDATE 不接受任何參數。它將當前本地日期作為數據類型 DATE 返回。請注意,參數括弧是可者判選的。 CURDATE 返回此時區的當前本地日期;它根據本地時間變數(如夏令時)進行調整。
邏輯模式下的 CURDATE 以 $HOROLOG 格式返回當前本地日期;
例如, 64701 。
顯示模式下的 CURDATE 以區域設置的默認格式返回當前本地日期首鏈改。
例如,在美國的區域設置為 02/22/2018 ,在歐洲的區域設置為 22/02/2018 ,在俄羅斯的區域設置為 22.02.2018 。
要指定不同的日期格式,請使用 TO_DATE 函數。
要更改默認的日期格式,使用 SET OPTION 命令和 DATE_FORMAT 、 YEAR_OPTION 或 DATE_SEPARATOR 選項。
要只返回當前日期,請使用 CURDATE 或 CURRENT_DATE 。
這些函數返回 DATE 數據類型的值。
CURRENT_TIMESTAMP 、 GETDATE 和 NOW 函數也可以作為 TIMESTAMP 數據類型返回當前日期和時間。
請注意,除了 GETUTCDATE 之外,所有 SQL時間和日期函數都特定於當地時區設置。
要獲得通用的(獨立於時區的)當前時間戳,你可以使用 GETUTCDATE 或ObjectScript $ZTIMESTAMP 特殊變數。
在使用嵌入式SQL時,這些數據類型的性能不同。
DATE數據類型將喚碰值存儲為 $HOROLOG 格式的整數;
當在SQL中顯示時,它們被轉換為日期顯示格式;
當從嵌入式SQL返回時,它們作為整數返回。
TIMESTAMP 數據類型以相同的格式存儲和顯示其值。
可以使用 CONVERT 函數來更改日期和時間的數據類型。
下面的例子都返回當前日期:
下面的嵌入式SQL示例返回當前日期。
因為這個日期是以 $HOROLOG 格式存儲的,所以它被返回為一個整數:
下面的例子展示了如何在 SELECT 語句中使用 CURDATE 返回所有發貨日期相同或晚於今天日期的記錄:
『叄』 嵌入式SQL的簡介
嵌入式SQL(英文: Embedded SQL)是一種將SQL語句直接寫入C語言,COBOL,FORTRAN, Ada等編程語言的源代碼中的方法。藉此方法,可使得應用程序擁有了訪問數據以及處理數據的能力。在這一方法中,將SQL文嵌入的目標源碼的語言稱為宿主語言。
在SQL標準的SQL86(1986年發布)中定義了對於COBOL, FORTRAN, PI/L等語言的嵌入式SQL的規范。在SQL89(1989年發布)規范中,定義了對於C語言的嵌入式SQL的規范。一些大型的資料庫廠商發布的資料庫產品中,都提供了對於嵌入式SQL的支持。比如Oracle, DB2等。
『肆』 dbms中嵌入式sql是為客戶端的應用程序提供的介面類對嗎
對。喊跡鋒戶端的應用程序離不開dbms中嵌入式sql的支持,所以是為其提供鄭晌的介面類是對的。dbms是一種操縱和管理資料庫的大型軟體,是用於建立、使用和維護資料庫州跡。
『伍』 互動式SQL與嵌入式SQL有什麼不同
1、語言不同
互動式SQL是指在終端交互方式下使用的SQL語言稱為互動式SQL;嵌入式SQL是一種將SQL語句直接寫入C語言,COBOL,FORTRAN, Ada等編程語言的源代碼中的方法。
2、使用不同
互動式SQL是在終端交互方式下使用;嵌入式SQL是嵌入在高級語言的程序中使用。
(5)嵌入式csql擴展閱讀:
提供對於嵌入式SQL的支持,需要資料庫廠商除了提供DBMS之外,還必須提供一些工具。為了實現對於嵌入式SQL的支持,技術上必須解決以下4個問題:
1、宿主語言的編譯器不可能識別和接受SQL文,需要解決如何將SQL的宿主語言源代碼編譯成可執行碼;
2、宿主語言的應用程序如何與DBMS之間悄拿傳遞數據和消息;
3、如何把對數據的查詢結果逐次賦值給宿主語言程序中的變數以供其處理;
4、資料庫的數據類型與宿主語言的數據類型有時不完全對應或等價,如何解決必要的數據類型轉換問題。
嵌入式SQL源碼的處理流程 為了解決上述這些問題,資料庫姿盯廠商需要提供一個嵌入式SQL的預編譯器,把包含有嵌入式SQL文的宿主語言源碼轉換成純宿主語言的代碼。
這樣一來,源碼即可使用宿主語言對應的編譯器進行編譯。通常情況下,經過嵌入式SQL的預編譯之後跡運和,原有的嵌入式SQL會被轉換成一系列函數調用。因此,資料庫廠商還需要提供一系列函數庫,以確保鏈接器能夠把代碼中的函數調用與對應的實現鏈接起來。
『陸』 第二十九章 SQL命令 DISTINCT
指定僅返回不同值的 SELECT 子句。
可選 DISTINCT 子句出現在 SELECT 關鍵字之後、可選 TOP 子句和第一個 SELECT-ITEM 之前。
DISTINCT 子句應用於 SELECT 語句的結果集。它將每個不同(唯一)值返回的行數限制為一個任意行。如果未指定 DISTINCT 子句,則默認情況下顯示滿足選擇條件的所有行。 ALL 子句與不指定 DEFAULT 子句相同;如果指定 ALL , SELECT 將返回表中滿足選擇條件的所有行。
DISTINCT 從句有兩種形式:
項目欄位必須按列名指定。有效值包括以下值:列名( DISTINCT BY(City) ); %ID (返回所有行);指定列名的標量函數( DISTINCT BY(ROUND(Age,-1) ;指定列名的排序函數( DISTINCT BY(%Exact(City) 。不能按列別名指定欄位;嘗試這樣做會生成 SQLCODE-29 錯誤。不能按列號指定欄位;這將被解釋為文字,並返回一行。將文字指定為 DISTINCT 子句中的項值將返回 1 行;返回哪行是不確定的。因此,指定 7 、 『Chicago』 、 『』 、 0 或 NULL 都返回 1 行。但是,如果將文字指定為逗號分隔列表中的項值,則該文字將被忽略,並且 DISTINCT 將為指定欄位名的每個唯一組合選擇一行。
DISTINCT 子句在 TOP 子句之前應用。如果兩者都指定,則 SELECT 只返回具有唯一值的行,唯一值是在 TOP 子句中指定的唯一值行數。
如果 DISTINCT 子句中指定的列包含 NULL (不包含值)行,則 DISTINCT 將返回一行作為 DISTINCT (唯一)值的 NULL ,如以下示例所示:
DISTINCT 子句在嵌入式SQL簡單查詢中沒有意義,因為在這種類型的嵌入式SQL中, SELECT 始終只返回一行數據。但是,嵌入式SQL基於游標的查詢可以返回多行數據;在基於游標的查詢中, DISTINCT 子句只返回唯一值行。
DISTINCT 子句在 ORDER BY 子句之前應用。因此, DISTINCT 和 ORDER BY 的組合將首先選擇滿足 DISTINCT 子句的任意行,然後根據 ORDER BY 子句對這些行進行排序。
DISTINCT 和 GROUP BY 這兩個記錄按指定欄位(或多個欄位)分組,並為該欄位的每個唯一值返回一條記錄。它們之間的一個重要區別是 DISTINCT 在分組之前計算聚合函數。 GROUP BY 計算分組後的聚合函數。以下示例顯示了這種差異:
DISTINCT 子句可以用一個或州檔多個聚合函數欄位指定,盡管這很少有意義,因為聚合函數返回單個值。因此,下面的示例返回單行:
注意:如果將聚合函數作為唯一項或選擇項的 DISTINCT 子句與 GROUP BY 子句一起使用,則 DISTINCT 子句將被忽略。可以使用子查詢實現 DISTINCT 、聚合函數和 GROUP BY 的預期組合。
根據為欄位定義的排序規則類型,將字元串值不同地分組在一起。默認情況下,字元串數據類型欄位使用 SQLUPPER 排序規則定義,該排序規則不區分大小寫。
如果欄位/特性排序規則類型為 SQLUPPER ,則分組的欄位值將全部以大寫字母返回。要按原始字母大小寫對值進行分組,或以原始字母大小寫顯示分組欄位的返回值,請使用 %Exact 排序規則函數。以下示例顯示了這一點,這些示例假冊扒亂設 Home_City 欄位是使用排序規則類型此升 SQLUPPER 定義的,並且包含值 『New York』 和 『New York』 :
可以使用管理門戶優化包含 DISTINCT 子句的查詢的查詢性能。依次選擇系統管理、配置、SQL和對象設置、SQL。查看和編輯 GROUP BY 和 DISTINCT 查詢必須生成原始值選項。(此優化也適用於 GROUP BY 子句。)。默認值為「否」。
此默認設置按字母值的大寫排序規則對字母值進行分組。此優化利用選定欄位的索引。因此,只有在一個或多個選定欄位存在索引時才有意義。它對存儲在索引中的欄位值進行排序;字母字元串以全部大寫字母返回。您可以設置此系統范圍的選項,然後使用 %exact 排序規則函數為特定查詢覆蓋它以保留字母大小寫。
也可以使用 $SYSTEM.SQL.Util.SetOption() 方法快速區分選項在系統范圍內設置此選項。要確定當前設置,請調用 $SYSTEM.SQL.CurrentSettings() ,它顯示打開的不同優化設置;默認值為 1 。
指定 DISTINCT 關鍵字會導致基於游標的嵌入式SQL查詢不設置 %ROWID 變數。即使 DISTINCT 不限制返回的行數,也不設置 %ROWID 。下面的示例顯示了這一點:
查詢行為的這種更改僅適用於基於游標的嵌入式 SQL SELECT 查詢。動態 SQL SELECT 查詢和非游標嵌入式 SQL SELECT 查詢從未設置 %ROWID 。
指定 DISTINCT 關鍵字會導致查詢檢索所有當前數據,包括當前事務尚未提交的數據。忽略事務的 READ COMMITTED 隔離模式參數(如果設置);在 READ UNCOMMITTED 模式下檢索所有數據。
以下查詢為每個不同的 Home_State 值返回一行:
以下查詢為每個不同的 Home_State 值返回一行,但返回該行的其他欄位。無法預測檢索到的是哪一行:
以下查詢為 Home_State 和 Office_State 值的每個不同組合返回一行。根據數據的不同,它要麼返回更多行,要麼返回與上一個示例相同的行數:
以下查詢使用 DISTINCT BY 為每個不同的名稱長度返回一行:
下面的查詢使用 DISTINCT BY 為 FavoriteColors %List 值的每個不同的第一個元素返回一行。它列出 FavoriteColors 為空的不同行:
以下查詢按排序規則升序返回從 Sample.Person 檢索到的前 20 個不同的 Home_State 值。 「top」 行反映 Sample.Person 中所有行的 ORDER BY 子句排序。
以下查詢在主查詢和 WHERE 子句子查詢中都使用 DISTINCT 。它返回 Sample.Person 中的前 20 個不同的 Home_State 值,這些值也在 Sample.Employee 中。如果未提供子查詢 DISTINCT ,它將檢索 Sample.Person 中與 Sample.Employee 中隨機選擇的 Home_State 值匹配的 DISTINCT Home_State 值:
以下查詢返回前 20 個不同的 FavoriteColore 值。這反映了 Sample.Person 中所有行的 ORDER BY 子句排序。眾所周知, FavoriteColors 欄位具有 NULL ,因此 FavoriteColors 為 NULL 的不同行出現在排序規則序列的頂部。
還要注意,在前面的示例中,因為 FavoriteColors 是一個列表欄位,所以歸類序列包括元素長度位元組。因此,以三個字母元素(紅色)開頭的不同列表值列在以四個字母元素(藍色)開頭的列表值之前。
『柒』 sql嵌入式和授權有什麼區別
不必逐個地為每個用戶授予或撤銷特權。
組提供了一種便利的方法為一組用戶執行授權,而不必逐個地為每個用戶授予或撤銷特權。通常,動態SQL語句考慮組成員資格,但靜態SQL語句並非如此。
嵌入式SQL是一種將SQL語句直接寫入C語言,COBOL,FORTRAN,Ada等編程語言的源代碼中的方法。在雀賣嵌入式SQL中,為了能夠區分SQL語句與主語言語句,所以SQL語句都必須加頃咐逗前綴EXECSQL。SQL語句的結束標准則隨主語言的不簡胡同而不同。
『捌』 資料庫嵌入式sql編程,求解
題目沒有說明表之間的外鍵關系,那我就默認同名的列名是外鍵,不清楚你用的編程語言,所以我使用:input作為輸入變數
1
select Teacher.Tname,Teacher.Tage,Teacher.Tsex,Work.Salary from Teacher,Work,Department
where Teacher.Tno=Work.Tno and Department.Dno=Work.Dno
and Department.Tno=Teacher.Tno and Work.Salary>:input
2
update Work set Salary=:input from Teacher,Department
where Teacher.Tno=Work.Tno and Department.Dno=Work.Dno
and Department.Tno=Teacher.Tno and Work.Salary<:input
『玖』 c中 使用嵌入式 SQL需要載入什麼頭文件和庫
嵌入式SQL程序的VC+SQL
server
2000實現的環境配置
嵌入SQL的C應用程序具體到VC++6.0,
SQL
Server2000
下調試可分為五步:1、環境初始化;2、預編譯;3、編譯;4、連接;5、運行。下面就其中重要的的操作方法給以詳細說明。
1、環境初始化
(1)
SQL
Server2000為其嵌入式SQL提供了一此特殊的介面;默認的安裝方式沒有安裝這此介面;因此,需要把devtools.rar解壓到SQLServer的系統日錄下(即文件夾devtools中的所有文件);如果操作系統安裝在C盤,則SQL
Server的系統目錄是C:\Program
Files\Microsoft
SQL
Server。(或
在安裝Microsoft
SQL
Server
2000時選擇安裝Development
Tools,為使用嵌入式SQL語言准備必要的頭文件和庫文件。)
(
2)初始化Visual
C++
6.0編譯器環境。在命令行方式下運行文件\Microsoft
Visual
Studio\VC98\Bin\vcvars32.bat。
(3)初始化SQL
Server的預編譯環境。在命令行方式下運行文件:\Devtools\samples\esqlc\setenv.bat。
(
4)
VC++6.0環境配置。具體配置分為如下三步[:
①Tools->options->directories->Include
Files:添加
C:\Program
Files\Microsoft
SQL
Server\devtools\include。將SQL
server自帶的用於資料庫開發的頭文件包含到工程環境中。
②Tools->options->directories->Lib
Files:添加C:\Program
Files\Microsoft
SQL
Server\devtools\x861ib。將開發用到的包包含到工程中。
③project->Settings->Link->Object/Library
Moles,添加庫文件:SQLakw32.lib,
Caw32.lib。這兩個文件之間用空格分開。
2、預編譯
C語言編譯程序不能識別應用程序中的SQL語句,需要經過預處理程序將其轉換成C語句。SQL
Server的預處理程序是nsqlprep.exe。
nsqlprep.exe在SQL
Server安裝日錄的MSSQL\Binn下。若SQL
Server資料庫採用的是默任安裝方式,則需要把binn.rar的內容拷貝到指定目錄下。
Microsoft
SQL
Server
2000提供的預編譯程序nsqlprep.exe,用於對嵌入式SQL程序進行預編譯處理,生成C語言源程序.實際上就是將嵌入式SQL程序中的嵌入式SQL語句替換為對運行時庫文件Sqlakw32.
dll的函數調用,接著運行時庫文件調用動態連接庫Ntwdblib.
dll通過網路來存取Microsoft
SQL
Server
2000資料庫伺服器.
預編譯程序nsqlprep的常用語法為:
nsqlprep
ESQL_File
/SQLACCESS
/DB
server_name.database_name
/PASS
login.password
其中ESQL_File是要預編譯的嵌入式SQL程序;/SQLACCESS通知nsqlprep自動地為嵌入式SQL程序中的靜態SQL語句創建相應的存儲過程;/DB
server_name.database_name指明要連接的伺服器以及資料庫名稱;/PASS
login.password給出登錄名及相應的口令.
下面的程序demo.sqc實現了從資料庫伺服器hushaobo的資料庫pubs中的authors表中讀取au_lname為white的人對應的
au_fname
值,並保存到變數first_name
中顯示出來。(連接資料庫的用戶為sa,對應密碼為1982)
#include<stdio.h>
void
main()
{
EXEC
SQL
BEGIN
DECLARE
SECTION;
char
first_name[40];
char
last_name[]="White";
EXEC
SQL
END
DECLARE
SECTION;
EXEC
SQL
CONNECT
TO
hushaobo.pubs
USER
sa.1982;
EXEC
SQL
SELECT
au_fname
INTO
:first_name
from
authors
WHERE
au_lname
=
:last_name;
EXEC
SQL
DISCONNECT
ALL;
printf("first
name:
%s
\n",first_name);
}
在命令行下運行:nsqlprep
demo.sqc
/SQLACCESS
/DB
hushaobo.pubs
/PASS
sa.1982
則生成demo.c,將該文件添加到VC工程中編譯即可。
3、編譯,連接與運行
在VC++6.0中創建一個
"WIN32
Console
Application"的Proiect,然後將預編譯生成的c文件加入Proiect,編譯連接即可生成訪問SQL
Server的可執行程序。
Visual
C++
6.0進行編譯連接時需要用到動態鏈接庫SQLakw32.d11與SQLaiw32.d11;盡管這兩個文件已經隨同binn.rar被拷貝到SQLServer安裝目錄的MSSQL\Binn文件夾下,但仍然需要把它們的路徑加到系統路徑變數中,以使得程序運行時能找到它們,具體添加方法如下:
方法1:把這兩個文件拷貝到操作系統目錄下的system32子目錄中。
方法2:我的電腦->屬性->高級->環境變數->path->編輯,在變數值中加入路徑值;新路徑與已有路徑間用;間隔。
注意調適程序時,文件名中不要包含cursor,否則可能會出錯。