嵌入式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,否则可能会出错。