数据库设计过程是指在一个给定的应用环境,选择合理的数据库模式和数据模型进行数据库及应用系统设计,使之能够有效存取数据并满足用户需求的过程。数据库设计的过程也和其他软件系统设计一样,是个反复迭代的过程。数据库设计过程的划分也不是十分严格的,通常在系统设计的实施中,也未必完全依照这六个步骤顺序去开发,不过这六个阶段基本上包括了数据库设计的全过程和相关问题。......
2023-11-24
3.3 函数和过程
函数和过程是数据库系统的主要组成部分。在数据库系统中,函数相当于数据库中的命令,可以通过调用函数来执行数据库中的相关功能;过程相当于数据库中能实现某个功能的一段程序。
3.3.1 函数分类
在数据库系统中,常用的函数有字符处理函数、数值函数、日期时间函数、逻辑函数、数据库操作函数、系统函数和其他函数。
1.字符处理函数
常用的字符处理函数如下:
(1)返回字符串长度函数。其格式如下:Len(字符表达式)
功能:返回字符串的长度。
例如:
?Len(“student”),其结果为7。
?Len(“I am a student.”),其结果为15。
(2)取子串函数。其格式如下:
Substr((字符表达式),(数值表达式1),(数值表达式2))
功能:数值表达式1的值作为开始位置,字符表达式2的值作为长度,取子字符串。
例如:
?Substr(“student”,2,4),其结果为“tude”。
?Len(Substr(“I am a student.”,6,9)),其结果为9。
(3)从右边取子串函数。其格式如下:
Right((字符表达式),(数值表达式))
功能:返回字符串右边指定数量的字符。
例如:
?Right(“student”,3),其结果为“ent”。
?Right(“I am a student.”,10),其结果为“a student.”。
(4)从左边取子串函数。其格式如下:
Left((字符表达式),(数值表达式))
功能:返回字符串左边指定数量的字符。
例如:
?Left(“student”,4),其结果为“stud”。
?Left(“I am a student.”,4),其结果为“I am”。
(5)大写转化为小写函数。其格式如下:
Lower(字符表达式)
功能:将字符表达式中所有的大写字母转化为小写字母。
例如:
?Lower(“DATE”),其结果为“date”。
?Lower(“Date”),其结果为“date”。
(6)小写转化为大写函数。其格式如下:
Upper(字符表达式)
功能:将字符表达式中所有的小写字母转化为大写字母。
例如:
?Upper(“student”),其结果为“STUDENT”。
?Upper(“sTUdent”),其结果为“STUDENT”。
(7)字符型转化为数值型函数。其格式如下:
Val(字符表达式)
功能:把字符表达式中的字符转化为数值。
例如:
?Val(“S”),其结果为83。
?Val(“21”)+Val(“12”),其结果为33。
(8)数值型转化为字符型函数。其格式如下:
Str((数值表达式1),(数值表达式2),(数值表达式3))
功能:把数值表达式1中的数值型转化为字符型,数值表达式2的值作为返回字符串的长度,数值表达式3的值作为小数部分的位数。
例如:
?Str(256.12345,6,2),其结果为“256.12”。
?Str(256.256,6,2),其结果为“256.26”。
(9)删除字符串空格函数。其格式如下:
Alltrim (字符表达式)
功能:将字符表达式前后的空格删除。
例如:
?Alltrim(“ a student ”),其结果为“a student”。
?Alltrim(“ 数据库系统 ”),其结果为“数据库系统”。
(10)转化为ASCII码函数。其格式如下:
ASC(字符表达式)
功能:将字符表达式中的第一个字符转化为ASCII码并返回。例如:
?ASC(“Student”),其结果为83。
?ASC(“I am a student.”),其结果为73。
(11)转化为字符函数。其格式如下:
Chr(数值表达式)
功能:将数值表达式转化为字符表达式。
例如:
?Chr(83),其结果为S。
?Chr(73),其结果为I。
(12)确定字符串位置函数。其格式如下:
AT(字符表达式1,字符表达式2,数值表达式)
功能:确定字符表达式1在字符表达式2中第“数值表达式”次出现的位置。
例如:
?AT(“student”,“I am a student.”,1),其结果为8。
?AT(“系统”,“数据库系统”,1),其结果为7。
2.数值函数
常用的数值处理函数如下:
(1)取绝对值函数。其格式如下:Abs(数值表达式)
功能:对数值表达式取绝对值。
例如:
?Abs(+156),其结果为156。
?Abs(-125),其结果为125。
(2)取最大值函数。其格式如下:
Max((数值表达式1),(数值表达式2),(数值表达式3),…)
功能:在数值表达式1,数值表达式2,数值表达式3,…中取最大值。
例如:
?Max(1,2,3),其结果为3。
?Max(“A”,“B”,“C”),其结果为“C”。
(3)取最小值函数。其格式如下:
Min(数值表达式1,数值表达式2,数值表达式3,…)
功能:在数值表达式1,数值表达式2,数值表达式3,…中取最小值。
例如:
?Min(1,2,3),其结果为1。
?Min(“A”,“B”,“C”),其结果为“A”。
(4)取余函数。其格式如下:
Mod((数值表达式1),(数值表达式2))
功能:取数值表达式1除以数值表达式2的余数。
例如:
?Mod(5,4),其结果为1。
?Mod(2,2),其结果为0。
(5)求e的x次方函数。其格式如下:
Exp(数值表达式)
功能:求e的数值表达式值的次方,e的取值为2.72。
例如:
?Exp(2),其结果为7.39。
?Exp(1),其结果为2.72。
(6)求平方根函数。其格式如下:
Sqrt(数值表达式)
功能:对数值表达式求平方根。
例如:
?Sqrt(4),其结果为2.00。
?Sqrt(81),其结果为9.00。
(7)四舍五入函数。其格式如下:
Round((数值表达式1),(数值表达式2))
功能:以数值表达式2的值为小数位数对数值表达式1进行四舍五入操作。
例如:
?Round(123.2586,3),其结果为123.259。
?Round(256.32,1),其结果为256.3。
(8)取整函数。其格式如下:
Int(数值表达式)
功能:对数值表达式进行取整操作。
例如:
?Int(123.65),其结果为123。
?Int(123.657),其结果为123。
(9)随机函数。其格式如下:
Rand(数值表达式)
功能:取随机数。
例如:
?Rand(0),其结果为0.97。
3.日期时间函数
常用的日期时间函数如下:
(1)取当前时间日期函数。其格式如下:
Datetime()
功能:返回当前时间日期函数值。
例如:
?Datetime(),其结果为04/10/2005/ 15:02:15 PM。
(2)取当前时间函数。其格式如下:
Time()
功能:返回当前时间。
例如:
?Time(),其结果为15:02:15 PM。
(3)取当前日期函数。其格式如下:
Date()
功能:返回当前日期值。
例如:
?Date(),其结果为04/10/2005。
(4)取当前秒钟函数。其格式如下:
Sec()
功能:返回当前秒钟值。
(5)取当前分钟函数。其格式如下:
Minute()
功能:返回当前分钟值。
(6)取当前小时函数。其格式如下:(www.chuimin.cn)
Hour()
功能:返回当前小时值。
(7)取当前天数函数。其格式如下:
Day()
功能:返回当前天数值。
(8)取当前月份函数。其格式如下:
Month()
功能:返回当前月份值。
(9)取当前年份函数。其格式如下:
Year()
功能:返回当前年份值。
(10)把当前时间日期转化为字符型函数。其格式如下:
Dtoc(日期时间表达式)
功能:把当前数值型日期时间转化为字符型日期时间。
例如:
?Dtoc(2005/04/10),其结果为“04/10/2005”。
(11)把当前字符型日期转化为日期型函数。其格式如下:
Ctod(字符表达式)
功能:把当前字符型日期转化为日期型。
例如:
?Ctod(“04/10/2005”),其结果为04/10/05。
4.逻辑函数
常用的逻辑函数如下:
(1)检测数据类型函数。其格式如下:
Type(字符表达式)
功能:检测字符表达式的数据类型,不同的返回结果表示不同的数据类型。具体数据类型如表3.1所示。
表3.1 返回字母与数据类型表
例如:
?Type(“数据库”),其结果为U。
(2)检测“空”值函数。其格式如下:
Empty(工作区)
功能:检测字符表达式是否为空,如果是,则返回值为真(.T.),否则返回值为假(.F.)。
例如:
?Empty(),其结果为.T.。
(3)检测函数。其格式如下:
Between(表达式1,表达式2,表达式3)
功能:检测表达式1是否在表达式2和表达式3之间,如果在,则返回值为真(.T.),否则返回值为假(.F.)。
例如:
?Between(“系统”,“数据库系统”,“概论”),其结果为.F.。
?Between(“student”,“I am a student.”,“I am a student.”),其结果为.T.。
5.数据库操作函数
常用的数据库操作函数如下:
(1)检测文件头函数。其格式如下:
Bof(工作区)
功能:检测工作区是否为文件头,如果是,则返回值为真(.T.),否则返回值为假(.F.)。
例如:
?Bof(1),其结果为.F.。
(2)检测文件尾函数。其格式如下:
Eof(工作区)
功能:检测工作区是否为文件尾,如果是,则返回值为真(.T.),否则返回值为假(.F.)。
例如:
?Eof(2),其结果为.F.。
(3)检测当前记录号函数。其格式如下:
Recno(工作区)
功能:返回检测文件工作区当前的记录号,返回值为数字。
例如:
?Recno(3),其结果为1。
(4)检测文件记录数函数。其格式如下:
Reccount(工作区)
功能:检测文件工作区的记录数是否与表达式的值相同,如果相同,则返回值为真(.T.),否则返回值为假(.F.)。
例如:
?Reccount(3),其结果为.T.。
6.系统函数
常用的系统函数只有一种,其格式如下:
Sys(字符表达式)
功能:返回机器名和网络机器号。
例如:
?Sys(1),其结果是2453509。
7.其他函数
在Visual FoxPro中,常用的其他函数如下:
(1)显示提示信息函数。其格式如下:
Messagebox(提示信息)
功能:系统运行时,以窗口的形式显示提示信息。
注意:提示信息函数的结果为数字,有多种对话框类型,不同的类型代表不同的含义。对话框的类型及含义如表3.2所示。
(2)自定义函数:在程序设计过程中经常为实现一个特定功能而编写一个程序段,作为一个模块,以便在其他程序中使用该功能时调用该程序,这种完成特定功能的程序段称之为自定义函数。
表3.2 对话框的类型及含义
自定义函数的定义格式如下:
Function <函数名称>
Parameters <参数表>
<语句序列>
Return <表达式>
Endfunc
其中,Function表示函数定义开绐,并给函数命名,说明该函数在调用程序中;Parameters是指函数中使用的变量名表或可以接收的参数,各个参数之间用逗号隔开;<语句序列>是指实现函数功能的命令语句;Return是指函数的返回值,省略时,函数返回值为.T.,Endfunc表示函数定义结束。
例如:定义一个自定义函数。
Function abc &&命令函数名
Parameters M &&定义参数
N=1 &&语句序列
Do While M>=1
N=M*N
M=M-1
Enddo
?N
Return N &&返回主程序
Endfunc
3.3.2 调用函数
在系统程序的设计过程中需要实现函数功能时,直接调用函数名即可,其调用格式如下:
函数名<参数表>
例如:调用自定义函数。
Function abc
Parameters M &&定义参数
N=1
Do While M>=1
N=M*N
M=M-1
Enddo
?N
Return N
Endfunc
Set talk off
Clear
Abc &&调用函数
?Salary
Set talk on
例如:调用系统函数。
Max(m,n)&&取最大值函数
If m>n
Max=m
Else
Max=n
?Max
Set talk off
Clear
Max &&调用函数?Max
Set talk on
3.3.3 过程和过程设计
过程和函数所实现的功能相同,过程也是一个程序段,可以在任何时间相互调用。
过程设计的格式如下:
Procedure <过程名>
Parameters <形参表>
<命令序列>
Return to master to 上级过程名
Endproc
其中,Procedure表示定义过程开始,并为过程命名;Parameters是指过程中使用的变量名表;<命令序列>是指实现过程功能的命令语句;Return是指返回到执行的程序中;Endproc表示定义过程结束。
在系统程序运行时,可以通过Do来调用过程,其格式如下:
Do 过程名
例如:定义一个过程并调用。
Set talk off
Clear
M=10
Do abc with M &&调用过程
Set talk on
过程设计如下: &&设计过程
Procedure M &&定义参数
N=1
Do While M>0
N=N*M
M=M-1&&M 循环一次,值减去1
Enddo
?N
Return&& 返回主程序
Endproc
数据库设计过程是指在一个给定的应用环境,选择合理的数据库模式和数据模型进行数据库及应用系统设计,使之能够有效存取数据并满足用户需求的过程。数据库设计的过程也和其他软件系统设计一样,是个反复迭代的过程。数据库设计过程的划分也不是十分严格的,通常在系统设计的实施中,也未必完全依照这六个步骤顺序去开发,不过这六个阶段基本上包括了数据库设计的全过程和相关问题。......
2023-11-24
1.交交运算的符号为“∩”,两个关系经过交运算后,相同部分重新组成一个新的关系。表1.5集合关系表关系运算主要有3种,即选择、连接和投影。表1.9职工号连接操作结果3.投影投影是选择两个指定关系中的属性组成一个新关系,投影运算也是单目运算,它是从列的角度进行操作的。......
2023-12-04
如果要使用缺省参数创建一个学籍管理数据库StuData,可以使用如下命令:Create Database StuData如果希望为数据库或事务日志指定一个或者多个特定文件,增加一个On Primary子句,列出一个或者多个文件,并可为分配这个文件的空间指定一个可选值,其命令形式如下:Create Database StuDataOn Primary,;如果为了提高性能和可恢复性,则可以使用Log On子句来指定数据库的SQL Server事务日志将存储在一个与数据库对象不同的设备上,示例如下:Create Database StuDataOn Primary,Log On;GO......
2023-11-24
图3.4.1追加记录结果例如,在职工基本情况表中删除所有男职工的记录:Set talk offUse 职工基本情况表.dbfDelete all for 性别=“男”ListUseSet talk on结果如下:3.替换命令命令格式如下:Replace [表达式1] with [表达式2]功能:用表达式2替换表达式1。例如:Set talk offUse 职工基本情况表.dbfSkip 4DisplayUseSet talk on结果如下:9.显示屏幕或窗口命令命令格式如下:Set talk off/on/window/nowindow功能:控制程序在执行时结果是否出现在屏幕或窗口上。......
2023-12-04
关键字Modify File用以表示按后面的文件说明,在指定的数据库中修改相应数据库文件。下面的语句可在学籍管理数据库增加一个新数据库文件,同时要修改原数据库文件StuFile l的最大文件尺寸为2000 MB。Alter Database StuDataAdd FileModify File又如,如果要删除学籍管理数据库文件StuFile2,则可使用如下命令:Alter Database StuDataRemove File StuFile2......
2023-11-24
2.强大的数据功能Visual FoxPro 8.0新增数据主要体现在4个方面。“IDE”选项卡:设置Visual FoxPro 8.0系统窗口的显示形式。......
2023-12-04
第一种网状模型数据库结构被开发、研制出来,它是网状数据库模型的基础和典型代表。而在数据库中,二者是相互独立的。表1.1数据库管理系统与传统文件应用系统特性对照表......
2023-12-04
从1.1.1节的介绍可以看到,在数据库管理系统出现之前,人们对数据的操作是直接针对数据文件编写应用程序实现的,这种模式会产生很多问题。对于1.1.1小节中列举的学生基本信息管理和学生选课管理两个子系统,如果使用数据库技术来管理,其实现方式如图1-4所示。保证数据的安全是通过数据库管理系统的安全控制机制实现的,保证数据的可靠是通过数据库管理系统的备份和恢复机制实现的。......
2023-11-24
相关推荐