在关系数据库产品中对单字节与双字节混合数据的支持的制作方法

文档序号:6405495阅读:212来源:国知局

专利名称::在关系数据库产品中对单字节与双字节混合数据的支持的制作方法本专利文件所公开的内容中包括一部分受版权保护的材料。版权所有者因其出现在专利与商标局专利文件或记录中而复制任何专利文件或专利公开并不反对,除此而外,保留一切版权。本发明涉及计算机化的数据库,特别是在关系数据库的一列中对双字节字符集数据与单字节字符集数据的使用。数据库用于存储供今后在用户请求下检索的大容量数据。用户可能是应用程序也可能是通过输入设备与数据库系统作交互式访问的最终用户。通常把相关的数据组称作数据文件,或者如在关系数据库中常用的那样称作表。表中数据的行称作逻辑记录,而数据列则称作域。在关系数据库系统中,用户所见的只是数据的表,而不是其它任何组织形式,譬如数据的层次结构。这些数据库系统一般包含一个计算机程序,通常称作数据库管理程序,用于响应通过用户接口输入的各种命令存储,编辑,更新,插入,删除,和检索数据。数据库管理程序处理用户对数据库的所有请求,执行上面列出的各种功能。具体地说,对于检索数据,设计了多种用于构成查找命令或“查询”的计算机语言,数据库管理程序能响影它们并提供所要求的数据。这些查询基本上是由查找指令编码的,以便计算机和协同的数据库管理程序执行所要求的查找。这种用于构成数据库查询的语言存在着某些问题。首先,许多查询语言与传统的程序设计语言不同。具有程序设计经验的数据库用户只是为了从数据库中取出有意义的数据便需要学习一组完全新的命令。而不具备这种经验的用户,例如许多终端操作员也并没有任何计算机经验,只是为了交互式访问数据库也不得不学习一种计算机程序设计方法。此外,这些查询语言需要高度复杂的语法和语义规则方面的知识,从而把能够成功地检索数据的人数进一步限制在只有受过高等和昂贵的培训的少数人。这反过来对这些计算机系统的应用产生不利影响,并严重地妨害了它们被广大的个人所应用。结构化查询语言(SQL)是供最终用户使用于与数据管理程序接口而检索信息的一种交互式查询语言,它同时是一种能嵌入应用程序而通过数据库管理程序来存取数据库中的数据的数据库程程设计语言。SQL是一种指定所需信息的简易方法。这一查询语言的代表是在<方案建议>中详细说明的标准查询语言即“SQL”,ANA数据库语言SQL,标准X3,135-1986,美国国家标准局,1430Broadway,NewYork,New,York,10018.SQL的详细讨论也刊出在“IBM数据库2SQL参考手册”文件号SC26-4346-3,IBM公司,这两种资料都辑录在此以供参考。例如,一个用户为了建立具有行与列的数据的表16,其中包含姓名与地址的数据,如图1所示,他可发布CREATETABLE语句将数据库定义如下CREATETABLEDIRECTORY(NAMECHAR(20),ADDRESSCHAR(50))CREATETABLE语句是SQL数据定义语句的一个例子。每一CREATETABLE语句给出要建的表的名字,各列的名字,以及这些列的数据类型。CREATETABLE语句是可执行语句,即,如果一名用户在终端上输入CREATETABLE语句,此时系统将建立该表。开始,表是空时,即没有任何数据行。然而,应用SQL的INSERT语句,用户可以建立图1中所示的表。表一经建立,并且在其中插入了记录,用户便可以通过SQL数据操作语句从表中检索数据。用户不仅可以通过上述CREATETABLE语句在任何时候建立一个表,而且可以ü鼳LTERTABLE语句以增加列的方法在任何时候改变一个已存在的表,例如,要在图1中的表16中增加一列“城市与州”,其ALTERTABLE语句如下ALTERTABLEDIRECTORYADDCITY-STATECHAR(20)上述语句在表“DIRECTORY”中增加到“CITY-STATE”。指定了列的名字以后,再指定该列的数据类型。下面列举了一些数据类型。最后三种范畴CHAR,VABCHAR,和LONGVARCHAR在这里称作字符数据类型。INTEGER带符号全字长二进制整数(31位精度)SMALLINT带符号半字长二进制整数(15位精度)DECIMAL带符号压缩十进制数,P个十进制位精度,设计小数点位于自右第q位后面。FLOAT带符号双精度浮点数CHAR(n)长度为n个字符的定长字符串VARCHAR(n)最大长度为n(不超过4000字节)的变长度字符串LONGVARCHAR长度不超过32700字节的变长度字符串这一领域中的其它信息,建议参阅作为参考文献的下列著作C.J.Pate数据库系统概述,第一卷,第4版,Addison-WesleyPublishingCompany,Inc.,1986。当用户插入图1所示的数据时,处理系统所见的并不是实际示出的数据,而只是一串的1和0,根据它们的数据类型,处理系统可以作不全的解释。如果数据是正文或字符,则处理系统从定长单位进行解释,每一单位表示一个字符,数字或某些其它的正文图形。这些单位通常称作码点,并总是具有固定的位宽度,例如8位(一字节)。单字节码点方案,即编码图式,以8位不同的1与0的组合可编码256个不同的码点。以这256个不同的码点,可以表示256个不同的字符,数字,符号等等。每一256码点的群称作一个码页,一个码页已足于表示英语中的字符与数字以及一些常用的其它符号。图2中示出了码页21的一个例子。上述单字节页已足于表示英语,但是,由于日语中包括了6000多个符号,上述编码方案不能用于表示所有的不同符号。所以,需要更“丰富”的编码方案,例如在日本工业标准的一个版本中提出的名为移位Jis的标准。移位Jis标准描述了日本语字符集与书写日本语中所用的6000多个符号的码页。移位Jis标准在名为“IBM注册图形字符集与码页”(文件号C-H3-3220-050)和“IBM日本语图形字符集,KANJI”(文件号C-H3-3220-24)的出版物中得到进一步描述。图3中示出了日本语的一个码页22的例子。参见图3,十六进制码0×00到0×7E表示单字节符号,如数字和大小写英文字母。十六进制码0×A1至0×DF表示单字节日本语符号,称作半长片假名,十六进制码0×81至0×9F和0×EO至0×FC可认为是访问约11,000-12000个日本语符号的“引导字节”。引导字节是双字节序列中的第一字节。所以,对于这11000上下的日本语符号,每一符号要用两个字节来标识。这定义了一种双字节编码方案。图3中所示的不同日本语符号的码页的优越性在了解了日本语的其它一些背景信息以后将会进一步认识。在日本语言中使用了三种日本语字符。它们是汉字、平假名与片假名。汉字字符是表意字符。单一的汉字字符或一串汉字字符表示一个词。定义给计算机使用的大约有7000个汉字字符。平假名与片假名字符是拼音字符。它们中的每一个表示一种声音音,平假名和片假名字符各有约50个。平假名用于连接汉字,例如表示进行时的词尾。片假名字符用于表示没有对应汉字的词,例如,日本语中的外来语如某些英文字。这些词可以用片假名以拼音表示,即,基于这些外来语的发音。作为一般规则,平假名用于表示语法词尾,而片假名用于特殊意义,例如加重词的语气或表示外来语。一个典型的日本语书写句子是汉字、平假名和片假名字符的混合体。如以上对参照图3的说明,片假名字符是O×A1至O×DF的单字节字符,而平假名和汉字字符则是双字节字符。显然,日本语中在一个表达式里混用单字节与双字节字符是常事。例如,一个汉字字符可以有多种读音,取决于它在表达式中的上下文。然而,对于每一平假名和片假名字符则只有一种读音。因此,一个日本语的词可以用汉字(双字节字符)(如果存在这样的汉字)表示,或者以写成平假名(双字节字符)或片假名(单字节字符)的它的发音来表示。此外,罗马字母表也适用于日本语,图3中以十六进制码O×41至O×7A表示。包含26个拼音符号的罗马字用于书写英文和书写日本语词的读音。罗马字主要用于技术与专业环境中没有适当日本语字符时构成声音。一串罗马字符(单字节)唯一地表示一个日本语词的日本语读音,否则这种日本语的词是用双字节字符表示的。日本语的书写句子是汉字,平假名,片假名,罗马字,数字和其它字符的混合体。其中包含单字节与双字节字符的混合体。同样,如果一个关系数据库支持日本语,则该关系数据库的列中也包含单字节与双字节的混合体。当前基于SQL的关系数据库产品有一个装配选择项可指定是否要处理混合(双字节和单字节)数据。如果指定了这一选择项,则字符数据以混合体处理。这样,如果指定了混合选择项,所有域中的所有数据都被当作混合数据对待,即使某些域中可能只包括单字节数据。在象日本语言这种需要双字节字符集数据的环境中,必须认为所有字符都是混合的单字节字符集数据和双字节字符集数据。处理混合数据需要比单字节数据更复杂的算法。结果,如果指定为混合数据,则会降低关系数据库所有的列中的数据的处理性能。以前,在个人计算机环境中,无法指明表中的某些列只用于单字节字符集数据,以便对这些例应用较为简单的算法。SQL语言没有提供指定或存储这些信息的方法。此外,在使用混合双字节字符集数据与单字节字符集数据的环境中,只用单字节字符集数据时与混合数据不同,一般生效的是不同的码页。所以,本发明的一个目标便是当关系数据库中存在着混合单与双字节数据时提高数据处理的性能。本发明的又一目标是指定关系数据库中的一个域只含单字节字符集数据以便在该域的数据上应用较简单的处理方法。在本发明的系统和方法中,对SQL语言进行了扩充,在CREATETABLE语句和ALTERTABLE语言上增加了一个选择参数,该参数以每一列为基础指定字符类型数据的一个子类型。该子类型指明数据是混合的或单纯单字节数据。此外,如果用户指定某列为单字节数据,用户尚可为该单字节字符集数据指定码页。如果用户指定某列为混合数据,他尚可指定单字节字符集数据所用的码页,以及双字节字符集数据所用的码页。本发明的系统和方法中所采用的编码方案有双重目的。简单地在数据库目录中查找一个字符列的单字节码页与双字节码页属性是否为零,系统或应用程序便能确定该字符列是被指定为混合数据或单纯单字节数据的;同时确定该列所用的码页。用于指明列中所含的字符子类型的标志就是码页本身,并可用于对该列进行特定的翻译,等等。例如,如果单字节码页属性为非零值而双字节码页属性为零,则该列被指定为只含单字节字符集数据。此外,非零的单字节码页属性的值便是用于指定一特定码页的值。如果单字节码页与双字节码页属性都为非零,则该列含有既有双字节字符集数据又有单字节字符集数据的混合数据。此外,这些非零值同时指明了单字节数据所用的码页与双字节数据所用的码页。本发明的系统和方法使数据库产品与用户应用程序能够从数据处理算法方面知道如何对待一字符列中的数据,例如截取,子串等。如果该列只用于单字节字符集数据,则数据处理可以大为简化。没有本系统和方法,则必须假定为混合数据的“最坏情况”。此外,对各列指定分别的码页将允许在列的基础上应用不同的整理序列。附图的简要说明图1示出了关系数据库中一个数据表的样品。图2示出了英语中的单字节数据所用的码页的样品。图3示出了日本语的一个码页的样品。图4A与图4B是本系统的关系数据库的综合图。图5A示出了用于指定说明一列中具有混合数据或单字节数据的字符数据类型的子类型的CREATETABLE)语句。图5B示出了用于指定说明一列中具有混合数据或单字节数据的字符数据类型的子类型的ALTERTABLE语句。图6是关系数据库管理程序的组成部分的块图。图7是表示本发明的方法中的总体步骤的综合流程图。图8是表示关系数据服务的组成部分的框图。图9是数据库系统目录中的SYSTABLES的图示。图10A,10B,10C是数据库系统目录中SYSCOLOMNS的图示。图11是SQL偏译器的SQL语法分析阶段流程图。图12是SQL编译器的代码生成阶段流程图。图13A,13B,13C,13D,13E是示出本发明的系统和方法的伪代码的详细流程图。图14是所生成的代码与压缩说明的执行流程图。图15是用码页更新SQLDA的流程图。图16A是混合数据的截取算法的流程图。图16B是单字节数据的截取算法的流程图。图17是混合数据的子串算法的流程图。图18示出了本发明的系统和方法的SQLDATA与SPLIND中的编码方案。从图4A与图4B中的块图开始参考,其中示出了可用于实现本发明的处理装置的综合视图。图4A示出了一种典型的个人计算机体系统结构,例如IBM个人系统2所采用的配置。这一体系结构的焦点包括一台微处理器1,例如Intel80286或80386或类似的微处理器。微处理器连接到具有一组数据线,一组地址线和一组控制线的总线2上。多个输入/输出设备或内存储器或存储设备3-8分别通过独立的适配限9-14与总线2相连。例如,显示器4可以是IBM个人/系统彩色显示器8514,其中适配器10可以集成在平面板上。其它设备3与5-8以及适配器9与11-14或者作为IBM个人系统2的部件包括在其中,或者作为插接选件而可从IBM公司购得。例如如,随机访问存储器6和只读存储器7以及它们对应的适配器12和13是作为标准配件包括在IBM个人系统2中的,而用于补充存储器6的附加随机访问存储器可以通过插接式内存扩展选件进行增加。在只读存储器7中存储了多条指令,称为基本输入输出操作系统即BIOS,供微处理器1执行。BIOS控制计算机的基本操作。操作系统15(例如OS/2)装入存储器6并与ROM7中存储的BIOS联合运行。对熟悉本专业的人可以理解,个人计算机系统可以这样配置,使BIOS的全部或一部分不存储在ROM7中而存储在随机存储器6中,以便通过改变,BIOS程序而允许改变基本的系统操作,并方便地将其装入随机访问存储器6中。有关个人系统2与操作系统OS/2的更多信息,建议参阅在此引为参考文献的下列参考手册TechmnialReferenceMannual,PersonalSystem/2(Model50,60Systems),IBM公司,部件号68×2224,订货号S68X-2224。TecnnicalReferenceMannal,PersonalSystem/2(Model80),IBM公司,部件号68X2256订货号S68X-2256。IBMOperatingSystem/2Version1.0StandardEditionTechnicalReference,IBM公司,部件号6280201订货号5871-AAA,Iacobucci,Ed,OS/2Pogrammer′sGuide,MeGrawHill,1988。在本发明的装置中,应用程序20例如关系数据库管理程序也可装入内存6或驻在介质5上。介质5可包括,但并不限于,软盘或硬文件。关系数据库管理程序20也可看成是操作系统15的扩充。关系数据库管理程序20包括一组广泛的关系数据库管理程序任务,它们向微处理器1提供指令使图4A与图4B中所示的处理系统能够执行关系数据库功能。装入内存6的一个应用程序18被说成是与事前装入内存6的操作系统联合运行的。在图4A与图4B的处理系统中,操作员通过操作键盘3上的控制键访问关系数据库管理程序20。键盘驱动处理器1,后者是通过总线2与显示器4,介质存储器5和内存6可操作地相连的。当一位用户通过键盘3与一个应用程序交互对话,而后者又与关系数据库管理程序20交互对话时,在显示器4上面用户显示关系数据库管理程序20及其数据。除了用户与关系数据库管理程序20进行交互对话以外,一个应用程序18也能通过自身的SQL命令与数据库管理程序20进行交互对话。如前所述的关系数据库系统中,处理混合字符数据比处理单字节字符数据更费事,因为字符界限并不一定出现在每一字节后面。这意味着包含移动字符数据的某些操作对于单字节数据完成得相对快些,因为只须从一个地址向另一地址移动一定数目字节的数据(字符)。由于混合字符可能跨越字符界限,将数据从一个地址移动到另一地址的算法必须与确定字符界限的算法联合,并进行保持字符数据的完整性的特殊处理才行。在允许混合字符数据支持日本语的关系数据库系统中,本发明的系统和方法向用户提供一种手段,在每列的基础上指定字符类型的子类型,说明该列是单字节或混合数据。用户可以在以CREATETABLE语句或ALTERTABLE语句建立该列时指定其字符类型的子类型。如图5A与图5B所示,用户在CREATETABLE语句32与ALTERTABLE语句34中分别对指定为列名33与35的列建立了字符数据类型的子类型37与39。Column-name133,35的子类型FORSBCSDATA37指定了Colamn-namel为单字节字符集数据。Column-name233,35的子类型FORMIXEDDATA39指定了Columm-name2为混合,单字节与双字节,字符集数据。这些SQL语句及其中所指定的子类型在本发明的系统中的处理如下。参考图6中所示的关系数据库管理程序20的核42的结构,图8中所示的关系数据服务25的结构,以及图7中所示的流程图。予编译程序从源程序18中抽取嵌入的SQL语句并将它们传送给关系数据库管理程序20的基本系统服务程序41(图7步骤71)。基本系统服务程序41将该SQL语句送到关系数据服务25。关系数据服务25是编译SQL语句的SQL编译器24的接口(步骤73)。SQL编译器生成可解释的代码(步骤74),这些代码为关系数据服务25的运行阶段解释程序52所执行(步骤75)。这一代码调用关系数据服务25的目录服务例行程序54,该例行程序更新数据库目录23(步骤76)。上述步骤在讨论过关系数据库管理程序20的核42的结构部件和功能(图6)和关系数据服务25的结构部件和功能(图8)以后后,还要参照伪码和流程图作进一步说明。关系数据服务25为SQLCREATETABLE与ALTERTABLE语句提供表的建立与操作。关系数据服务25同时管理数据库目录23。数据库目录本身也是关系数据库中的表,它们驻在关系数据库所驻在的文件系统中,例如在图4A中的介质5上。数据库目录23是从属的数据库事物,它由数据库管理程序建立和维护。所有目录表在建立数据库时建立,并作为关系数据库表实现。目录表与用户建立的表没有区别,只是它们只能被核所使用和维护,虽然它们也能被用户查询。若干目录表由系统维护并含有关于用户表与程序的信息。关系数据服务25(图6)是预编译器43和应用程序18与数据库管理程序20的核42的接口。予编码器调用SQL编译器编译SQL语句。应用程序执行(解释)SQL语句编译后的格式。关系数据库管理程序的核42包括关系数据服务25,SQL编译器24,排序/列表服务44,数据管理服务45,索引管理程序46,数据服务47,数据保护服务48,缓冲池服务49,以及操作系统服务50。SQL编译器24编译SQL语句,SQL编译器在本发明的系统和方法中有三个主要功能。SQL编译器提供分析,语义,和代码生成。分析器执行词法与语法检查,并建立分析树。语义功能包括目录查找,以及语句的语义检查。在代码生成阶段,生成线索码和其它访问节。排序/列表服务44提供排序与暂时关系(列表)管理功能。数据管理服务45提供数据库的物理模型以及提供物理表操作。牵引管理程序46提供物理索引操作、数据服务47提供数据值比较,数据交换,以及运算。数据保护服务48提供事务管理,并发控制,以及复原。缓冲池服务49提供缓冲区与文件管理以及输入/输出功能。操作系统服务50提供内存管理。关系数据服务25的组成部分示出在图8中。应用程序接口51处理来自予编译器43(图6),应用程序18,和服务程序的请求,并为之确定路由。解释程序52执行(解释)SQL语句编码后的格式(用线索码作为语句的目标代码)。解释程序52为线索码中的每一运算符调用适当的例行程序,例如数据库运算符(表访问,合并,连接,等)以及表达式运算符(加,比较,等)。访问方案管理程序53管理目录与内存中的访问方案,以及管理目录与内存中的访问节。目录服务54是为了操作目录而与数据管理服务45的接口(图6),运行统计55是数据管理服务45的接口(图6),收集表与索列的统计。当一条CREATETABLE32或ALTERTABLE34语句中包含对字符列33,35的FORMIXEDDATA参数39或FORSBCSDATA37时,如图9与图10A所示在数据库目录23中产生了下述改变。SYSTABLES27(图9)与SYSCOLUMNS28(图10A)是数据库目录表23中的两个表。在SYSTABLES27中为每一个新建的表或视图插入一行。所有的目录表包括它本身在这表中都有对应的项。在SYSCOLUMNS28中,为每个表或视图的每一个被定义的列都插入一行。所有的目录表在这一表中也都有项。参看图9中的SYSTABLES27,在列PACKED-DESC94(压缩说明)中,为指定为FORMIXEDDATA的列编码了内部数据类型CHARMIXEDVARCHARMIXED或LONGVARCHARMIXED。数据库管理程序用这一内部数据类型来确定是否对字符列实施混合数据处理。如果既不指定为FORMIXEDDATA又不指定为FORSBCSDATA,也没有指定FORBITDATA则在本产品的双字节版本中认为是FORMIXEDDATA。在本发明的实施例中,FORBITDATA用于容纳二进制数据。在一个字符列中任何不作为字符数据处理的二进制数据被指定为FORBITDATA。然而,在本发明的其它实施例中,这一外加的分类是不必要的。参看图10A中的SYSCOLMNS28,在列COLTYPE(列的数据类型)93(图10A)中所编码的是实际SQL数据类型CHAR,VARCHAR或LONGVARCHAR。在列CODEPAGE94与DBCSCODEPG95中(图10A,10B,10C)编码了下述信息。如果有一个对数据库系统目录23的SYSCOLUMN表28中的列类型93的查询,则发生如下情况。如果系统列28中的列类型93指出的是CHAR,VARCHAR,LONGVARCHAR这样的字符数据类型,则可查询码页列CODEPAGE94与双字节字符集码页列DBCSCODEPG95以确定字符类型的子类型。本发明的编码方案能快速而高效地确定子类型,如图10C中所示。如果CODEPAGE与DBCSCODEPG列94,95中各有一零值,则子类型指定为FORBITDATA,这是不作为字符数据处理的数据。如果CODEPAGE列94为非零值,而DBCSCODEPG列也为非零值,则该列为混合数据,这是不加特别指定时该列的子类型的省缺值。再者,如果CODEPAGE列94或DBCSCODEPG列95为非零值,则这一非零值指定数据库中该列所用的特定码页。在FORBITDATA的情况下,不指定码页,因为这一数据不作为字符数据处理。本发明上述系统和方法的优选实施例以下述伪码表示。下述伪码将在后面参照图11-15说明。缩写CD列说明(以压缩说明方式)DDL数据定义语言DMS数据管理服务Ⅰ)在CREATETABLE和ALTERTABLE语句中增加对MIXED和SBCS字符子类型的支持。Ⅱ)在列上增加对CODEPAGE属性的支持。注步骤A)和B)只脱机进行一遍,以建立一个新的SQL分析器。A)增加下列生成式,修改SPL分析器文法表ColumnType=CharacterTypeCharacterOptionCharacterOption=Empty=ForMixed(generateFOROPTIONnode)=ForSBCS(generateFOROPTIONnode)ForMixed=FORMIXEDDATAMixedOptionForSBCS=FORSBCSDATASBCSOptionMixedoption=Empty=(Codepage,Codepage)SBCSOption=Empty=(Codepage)Codepage=IntegerB)生成新的分析器表(应用脱机分析器生成器和新的文法表)。C)调用SQL编码器编译CREATETABLE或ALTERTABLE语句(SQL编译器分析器阶段)注输入为SQL语句。输出为分析树。/*IF(CREATETABLEstatement)*//*GenerateparsefreeforCREATETABLEStatement*//*ELSE(ALTERTABLEstatement)*//*GenerateParsefreeforALTERTABLEstatement*//*ENDIF*//*IF(FORMIXEDorFORSBCSparameferpresent)*//*GremerateFOROPTIONnodeinparsefree.*/版权所有,IBM公司1988参见图11与上面所示的伪码,下述操作将得到执行。调用SQL编译器对SQL语句进行编译。在SQL分析器阶段,SQL编译器为CREATETABLE语句或ALTERTABLE语句生成分析树节点,(步骤101)。如果在SQL语句中指定了FORMIXED,FORSBCS或FORBIT,则生成-FOROPTION分析树,(步骤103,105)。如果在SQL语句中定义了一个码页参数,(步骤107),则生成一码页分析树节点,(步骤109)。(SQL编译器代码生成阶段)注输入是分析树,输出是更新的压缩说明和可解释代码。/*IF(CREATETABLEstatement)*//*StoreDDLCREATETABLEOpcodeinthreadedcode*//*ELSE(ALTERTABLEstatement)*//*StoreDDLALTERTABLEOpcodeinthreadedcode*//*ENDIF*//*Initializeparsetreetraversalpointertoparsetreerootnode*/IBM公司版权所有1988参见图12和上面所示的伪码,对SQL编译器的代码生成阶段进行说明。图11中早先生成的分析树连同它所有的节点是代码生成阶段的输入,(步骤111)。如果该SQL语句既不是CREATETABLE也不是ALTERTABLE,(步骤113),则这一SQL语句正常处理,(步骤115)。如果该SQL语句是CREATETABLE语句或ALTERUABLE语句,则建立这一语句的操作码(步骤117)。在代码生成阶段,指向分析树的根节点,(步骤119)。/*TRAVERSEPARSETREE*//*DOWHILE(noerrorsdetectedandparsetreestillneedstobetraversed)*//*SWITCH(parsetreenodetype)*//*caseHeaderColumnListnodetype(startofCDs)*//*CallroutinetoinitializeCDpackeddescriptionfields*//*ENDCASE*//*caseColumnnameidentifiernodetype*//*AllocatestorageforCDstructureandcolumnname*//*IF(storageallocatedsuccessful-ly)THEN*//*setupmiscellaneouscolumninformation*//*InitializeCDcodepage#1todatabaseSBCScodepage*//*InitializeCDcodepage#2todatabaseDBCScodepage*//*Updatelengthofpackedde-scription*//*ENDIF*//*ENDCASE*//*caseFOROPTIONnodetype*//*SWITCH(subtypeofFOROPTION)*//*caseFORBITDATAnodetype*//*SWITCH(columntypeinCD(setduringprocessingofprecedingnode))*//*casecolumntype=CHARMIXED*//*StoreCHARcolumntypeinCDtypefield*//*ENDCASE*//*casecolumntype=VARCHARMIXED*//*StoreVARCHARcolumntypeinCDtypefield*//*ENDCASE*//*casecolumntype=LONGVARCHARMIXED*//*StoreLONGVARCHARcoltypeinCDtypefield*//*ENDCASE*//*ENDSWITCHcolumntype*//*SetCDcodepages#1and#2to0*//*ENDCASEFORBIT*//*caseSINGLEBYTECHARACTERSETnodetype*//*SWITCH(columntypeinCD(setduringprocessingofprecedingnode))*//*casecolumntype=CHARMIXED*//*StoreCHARcolumntypeinCDtypefield*//*ENDCASE*//*casecolumntype=VARCHARMIXED*//*StoreVARCHARcolumntypeinCDtypefield/*/*ENDCASE*//*casecolumntype=LONGVARCHARMIXED*//*StoreLONGVARCHARcoltypeinCDtypefield*//*ENDCASE*//*ENDSWITCHcolumntype*//*IF(codepagewasspecified)THEN*//*Getcodepagefromsavearea*//*StorecodepageinCDcodepage#1field*//*Store0inCDcodepage#2field*//*ENDIF*//*ENDCASESBCS*//*caseMIXEDCHARACTERSnodetype*//*IF(codepagewasspecified)THEN*//*Getcodepage2fromsavearea*//*StorecodepageinCDcodepage#2field*//*Getcodepage1fromsavearea*//*StorecodepageinCDcodepage#1field*//*ENDIF*//*ENDCASEMIXED*//*ENDSWITCHsubtypeofFOR*//*ENDCASEFOROPTION*//*caseCodepagenodetype*//*SaveCodepageIdentifier*//*ENDCASE*//*casedatatypenode(char,varchar…)forcolumn*//*SWITCH(datatype)*//*caseDatatype=CHAR*//*StoreCHARMIXEDcolumntypeinCDtypefield*//*ENDCASE*//*caseDatatype=VARCHAR*//*IF(lengthwasspecified,i.e.,thisisaVARCHAR)THEN*//*StoreVARCHARMIXEDcoltypeinCDtype*//*ELSE*//*StoreLONGVARCHARMIXEDcoltypeinCDtype*//*ENDIF*//*ENDCASE*//*ENDSWITCHdatatype*//*caseCDnodetype(endofcolumndefinition)*//*noaction*//*ENDCASE*//*ENDSWITCHparsetreenodetype*//*IncrementParseTreePointertonextnode*//*ENDWHILE*/参见图13A-13E,和上面列出的伪码,根据节点的类型发生下述步骤。如果该节点是一标题列(步骤121),则初始化压缩说明列,(步骤123)。如果该节点是一个列节点,(步骤125),则分配压缩说明中的列说明的存储区(步骤127)。然后建立列信息,(步骤129),并且将单字节码页和双字节码页初始化为数据库的码页,(步骤131,133)。随即更新压缩说明长度(步骤135)。如果该节点是一个FOR选择项如FORBIT,FORSBCS,或FORMIXED,(步骤137),对上述每一情况,发生下述步骤。如果是FORBIT节点或FORSBCS节点,(步骤139,141)同时列类型是CHARMIXED,(步骤143,图13B),则在列说明列类型域中存储CHAR,(步骤145)。如果列类型是VARCHARMIXED,(步骤147),则在列说明类型域中存储VARCHAR(步骤149)。如果列类型是LONGVARCHARMIXED,(步骤151),则在列说明列类型域中存储LONGVARCHAR,(步骤153)。回头参看图13A,在FORBIT选择的情况下,(步骤139),单字节码页和双字节码页都设置成零,(步骤155,图13C)。在FORSBCS选择的情况下,(步骤141,图13A),如果指定了码页域,(步骤157,图13C),则这一码页受到检索并存储在第一码页即单字节字符集码页的列说明中,(步骤159,161)。双字节码页设置为零。参见图13A与13D,在指定了FORMIXED选择的情况中,(步骤163,图13A),并且还指定了码页,(步骤165,图13D),则第二码页受到检索并存储在列说明码页#2名下,(步骤167)与169)。然后第一码页受到检索并存储在列说明码页#1名下,(步骤171,与173)。参见图13A与13E,如果指向的节点是一个数据类型节点,(步骤175,图13A),则发生图13E中所示的下述步骤。如果数据类型是CHAR,则在列说明列类型域中存储CHARMIXED,(步骤177,179)。如果数据类型是VVARCHAR,并指定了长度,(步骤181,183),则在列说明列类型域中存储VARCHARMIXED,(步骤185)。如果没有指定长度,则在列说明列类型中存储LONGVARCHARMIXED,(步骤187)。从上面指出的方式重复上述步骤直到所有的节点全部处理完。在SQL编译器完成上述步骤后,关系数据服务调用解释程序执行已生成的线索码和压缩说明。如果该语句是CREATETABLE语句,则其输出是建立在数据库中的一个新表,在SYSTABLES目录表中为新建立的表所开辟的一行,以及在SYSCOLUMNS目录表中为该新表的每一列所开辟的对应行。对ALTEPTABLE的输出是在SYSCOLOMNS目录表中为新增加每一列开辟一对应的行,以及在SYSTABLES目录表中为被修改的表更新其对应的行。下面的伪码表示执行解释程序所生成的线索码和压缩说明的步骤。C)调用运行阶段解释程序执行CREATETABLE语句注输入是SQL编译器生成的线索码及压缩说明。输出是数据库中建立的新表;SYSTABLES目录表中为建立的表开辟的行;SYSCOLUMNS目录表中为新表的每一列开辟的对应行。/*setupDMStabledescriptionstructurefrompackeddescription*//*CallDMStocreatethetable*//*ToSYSTABLES,addrow(includingpackeddescriptioncolumn)fornewtable*//*Getapointertothefirstcolumndescription*//*Foreachcolumninthepackeddescriptionforthetable*//*setupSYCOLUMNSCODEPAGEfieldfromcodepage#1*//*setupSYSCOLUMNSDBCSCODEPGfieldfromcodepage#2*//*setupSYSCOLUMNSCOLTYPEfieldwithcharactertype,notsubtype*//*SWITCH(columntypeinpackeddescrip-tionCD)*//*casecolumntype=CHARMIXED*//*Store“CHAR”inSYSCOLUMNScolumntypefield*//*ENDCASE*//*casecolumntype=VARCHARMIXED*//*Store“VARCHAR”inSYSCOLUMNScolumntypefield*//*ENDCASE*//*casecolumntype=LONGVARCHARMIXED*//*Store“LONGVAR”inSYSCOLUMNScolumntypefield*//*ENDCASE*//*ENDSWITCH*//*InserttheRowintoSYSCOLUMNS*//*ENDFOR*/B)调用运行阶段解释程序执行ALTERTABLE语句注输入是SQL编译器生成的线索码和压缩说明输出是数据库中表中新增加的列说明在SYSTABLES目录表中对应于被改变的表的经过更新的行在SYSCOLUMNS目录表中对应于表中新增加的每一列的行/*setupDMStabledescriptionstructurefrompackeddescription*//*CallDMStoalterthetabledescriptioninthedatabase*//*InSYSTABLES,updatepackeddescriptioncolumnforalteredtable*//*Getapointertothefirstcolumndescrip-tion*//*Foreachcolumninthepackeddescriptionforthetable*//*setupSYCOLUMNSCODEPAGEfieldfromcodepage#1*//*setupSYSCOLUMNSDBCSCODEPGfieldfromcodepage#2*//*setupSYSCOLUMNSCOLTYPEfieldwithcharactertype,notsubtype*//*SWITCH(columntypeinpackeddescriptionCD)*//*casecolumntype=CHARMIXED*//*Store“CHAR”inSYSCOLUMNScolumntypefield*//*ENDCASE*//*casecolumntype=VARCHARMIXED*//*Store“VARCHAR”inSYSCOLUMNScolumntypefield*//*ENDCASE*//*casecolumntype=LONGVARCHARMIXED*//*Store“LONGVAR”inSYSCOLUMNScolumntypefield*//*ENDCASE*//*ENDSWITCH*//*InserttheRowintoSYSCOLUMNS*//*ENDFOR*/参照图14,对上面列出的伪码进行说明。从压缩说明建立数据管理服务表说明(步骤201)。数据管理服务然后实际建立新的物理表或列,(步骤203)。目录服务在SYSTABLES中增加对应的行,(步骤205)。在SYSCOLUMNS中为新建立的表的每一列或新增加的每一列增加一行,SYSCOLUMNSCODEPAGE列设置为列说明中的码页1,(步骤209),并且SYSCOLUMNSDBCSCODEPG列设置为列说明中的码页2,(步骤211)。如果列说明列类型是CHARMIXED,则SYSCOLUMNCOLTYPE设置为CHAR,(步骤213,214)。如果列说明列类型是VARCHARMIXED,则SYSCOLUMNCOLTYPE设置为VARCHAR,(步骤215,216)。如果列说明列类型是LONGVARCHARMIXED,则SYSCOLUMNCOLTYPE设置为LONGVARCHAR,(步骤217,218)。如果列说明列类型既非CHARMIXED,VARCHARMIXED,又非LONGVARCHARMIXED,则SYSCOLUMNCOLTYPE设置为列说明列类型,(步骤219)。在SYSCOLUMNS中增加一行,(步骤221),并检索下一列说明,(步骤223)。下列伪码表示以指定的码页更新SQLDA。有关SQLDA的更多说明和用途,这里收入下述手册作为参考文献并建议参考。IBMSYStemsApplicationArnitectureCommonProgrammingInterfaceDatabaseReference,IBM公司,文件号SC26-438-0,1987。在处理SELECT语句的SQLPREPARE或DESCRIBE时以码页信息更新SQLDA。/*whileprocessingSELECTlist*//*iflistitemiscolumn*//*copycodepage#1(SBCScodepage)frompackeddescriptiontoSQLDASQLDATAfield*//*copycodepage#2(DBCScodepage)frompackeddescriptiontoSQLDASQLINDfield*//*elsenotcolumn*//*copycodepage#1(SBCScodepage)fromdatabasecodepageareatoSQLDASQLDATAfield*//*copycodepage#2(DBCScodepage)fromdatabasecodepageareatoSQLDASQLINDfield*//*endif*//*endwhile*/CopyrightIBMCorporation1988/IBM公司版权所有1988参照图15,对上面列出的伪码进行说明。如果SQL语句不是SELECT的PREPARE或DESCRIBE,则SQLDA不被更新,(步骤225,227)。如果SQL语句是SELECT的PREPARE或DESCRIBE,则检索选择表中的第一项,(步骤229)。如果该选择表项是列,(步骤231),则从压缩说明中将SBCS码页(码页1)复制到SQLDATA域中,(步骤233)。并从压缩说明中将DBCS码页(码页2)复制到SQLIND域中,(步骤235)。如果选择表项不是列,则从数据库码页区将SBCS码页(码页1)复制到SQLDATA域中,(步骤239),并且从数据库码页区中将DBCS码页(码页2)复制到SQLIND域中,(步骤241)。然后检索下一选择表项,对所有选择表项重复步骤237及上述步骤,(步骤243)。下面说明对按照本发明的系统和方法进一步指定了子类型为混合数据或单字节字符集数据的列从数据库表中检索数据的操作。数据是使用SELECT和FETCH语句从数据库表中抽取和返回给应用程序的。使用一个SQLDA(SQL描述符区)或一个宿主变量表,数据库管理程序将数据传送到应用程序的数据区中。对于字符数据类型,如果应用程序中的目标数据区的长度短于所请求的数据库数据的长度,则数据将被截短并在SQLCA中设置一警告标志,如上述数据库参考手册中所述。如果字符数据为混合数据,在截短过程中要用到特殊的处理,以免腰折一个双字节字符,而导致不合法的最后字符。混合数据的截短算法示出在图16A中。“N”表示目标区以字节计算的长度,(步骤245)。“FB”表示截短后的数据的最后一个字节的地址,(步骤247)。“N”字节数据从数据库数据的起始地址传送到目标地址(步骤249)。FB成为目标区的起始地址+N-1,(步骤251)。确定FB前面最后一个字符的边界,(步骤253)。如果FB是一个双字节字符的第一个字节,则以一个单字节空格取代FB,(步骤255,257)。否则,不作任何动作。作为比较,单字节数据的截短算法示出在图16B中。同样,“N”是目标区长度的字节数,(步骤259)。然后,N字节数据从数据库数据的起始地址传送到目标地址,(步骤261)。如图中所示,混合数据截短算法图16A中包括只含单字节的数据图16B中所不必要的步骤。在图16A步骤253中确定最后字节边界的代价可能特别高,取决于数据的长度和内容。增加了指明混合数据的内部数据类型以后使进行截短操作的运行阶段代码能够有选择性地调用单纯单字节例行程序图16B或代价更高的混合例行程序图16A。SUBSTRSCALARFUNCTION也是对单字节数据比混合数据效率更高。纯量函数可用在SQL语句中的表达式中。SUBSTR是一个纯量函数,它返回一个字符数据域的一个子串。包括SUBSTR的纯量函数在“IBMDatabase2SQLReference”(文件号SC26-4346-3,IBM公司)中进一步说明。SUBSTR函数的第一个参数指定从中抽取子串的那一数据库字符串。参数2是子串的起始字节位置。参数3是结果的长度字节数。对于混合数据,子串的最后字节必须用上述截短例行程序处理以保证最后字符的合法性。子串的第一个字符也必须进行检查以保证结果字符串不是从一个双字节字符的第二字节开始的。这一检验的算法示出在图17中。混合数据的SUBSTR第一个字符的合法性验证如下。“N”是SUBSTR的参数2,(步骤263)。“SB”是子串的起始字节,(步骤265)。“SB”成为参数1数据库数据的地址+N-1,(步骤267)。然后确定SB前面最后字符的边界,(步骤269)。如果SB是一个双字节字符的第二字节,则子串的第一个字节以单字节空格符替换,(步骤271,273)。否则,可采取任何动作。如果参数1不是混合数据类型的,则不需要调用对子串的第一个和最后一个字符进行特殊边界检验和处理的例行程序,(步骤269,271,273,253,255和257)。应用程序也能从SBCS数据和MIXED数据的标识中得到。一个应用程序可能对字符数据进行的特殊处理要取决于该数据是单字节数据或混合数据。例如,一个程序要求生成一份按一个特定的域排序的报告,混合数据不能按以256字节有序值谋砦〖虻ヅ判颉K纸谧址呐判蛩惴ㄊ歉丛拥模宜嫠糜镏侄浠所以,一个应用程序在试图对数据施行代价高昂的算法以前能够查询系统目录并确定表中的一列是否定义为MIXED是有用的。这便允许一个广义的用户接口或报告生成应用程序对其它应用程序建立的字符数据进行灵巧的处理,因为有关字符数据类型的信息存储在数据库中,独立于建立它们的应用程序。应用程序从系统目录中获得信息的方法是1)从一个目录表中SELECT和2)PREPARE或DESCRIBE进入一个SQLDA。这些SQL操作进一步说明在“IBMDatabase2SQLReference”(文件号SC26-4346-3,IBM公司)中。因为FORMIXEDDATA与FORSBCSDATA是数据与类型而不是SQL数据类型,应用程序不能检验SYSCOLOMNS中的COLTYPE列或SQLDA中的SQLTYPE域而得到子类型信息,反之,提供了下述方法将信息返回给应用程序,对于字符数据类型,经过DESCRIBE语句(或者具有INFO子句的PREPARE语句)以后SQLDATA和SQLIND域的编码如图18所示。应用程序也能查询SYSCOLUMNS28(图10A)中的CODERAGE列94和DBCSCODEPG列95中如图10C所示的编码图式。同样,一个应用程序可能对管理字符数据编码的特定码页是敏感的。例如,一个应用程序在试图对数据进行检索,特别是改变这些数据前,要求确定该应用程序是否了解数据的编码方案。为了支持这些需要,本发明不但允许一个应用程序查询数据库以确定一个给定的字符域的码页,而且一个应用程序可以在建立一个字符域时宣布其码页环境。此外,由于本发明的设计允许每一列的码页属性独立于其它列地宣布,提供多码页环境的高级系统和应用程序也完全能得到支持。下面进一步展示在允许混合字节数据的关系数据库系统中指定单字节字符集数据的特出优点。为了展示的目的,用下述的定区别单字节字符与双字节字符单字节字符用小写字母表示;例如,a,b,c,…双字节字符用双大写字母表示;例如,AA,BB,CC,…作为例子,一个名为SAMPLE的表有两列分别名为IVORY与HEINZ,IVORY只含单字节字符串(值)而HEINZ中则含有混合单字节与双字节字符串。这一表可以用下列SQL语句建立CREATETABLESAMPLE(IVORYVARCHAR(10)FORSBCSDATA,HEINZVARCHAR(10)FORMIXEDDATA)使用上面确定的表示单字节与双字节字符的约定,IVORY与HEINE的某些值列出如下,SAMPLEROWIVORYHEINZ1abcAABBCC2dogDDOOg3qwertyuiopZZxCCvBBn4lastvalueqQQqQQ使用上列样品表,下面展示单纯由单字节字符组成的数据串的处理方法与由单字节和双字节字符二者组成的数据串的处理方法之间的差别。一个混合串具有只能从串的起点进行分析的性质。即,串中任何字节都没有意义,除非该串中各前驱字节的性质都已确定W魑纠俣ㄓ没应用程序要求只删除IVORY与HEINZ中各值的最后字节。用于IVORY列的值的处理方法是直观的。扫描到串的后尾,抛弃串中最后字节即可。如果同样的处理方法用于HEINZ列中的值,则如果串中最后一个字符是双字节字符,便会抛弃一个双字节字符的第二字节。所以,对于混合字节的列需要用更为复杂的处理算法。首先,必须确定串中最后字符的性质(单字节或双字节)。单纯检验最后字节的值是不够的,因为单字节字符与双字节字符的第二字节共用同样的码点值。所以,要确定串中最后字符是单字节还是双字节字符,必须施行复杂的分析算法。这无疑是费事和繁冗的,然而却是不可避免的。这一对SAMPLE表上的值的“最后字节”截除操作的结果如下SAMPLEROWIVORYHEINZ1abAABB2doDDOO3qwertyuioZZxCCvBB4lastvaluqQQq如果有人事先能认定一列中只含单字节字符串,那未这这些列便有可能使用比操作在混合单字节与双字节字符串上的方法性能高得多并且简单得多的截断算法。“FORSBCSDATA”选择项允许数据库用户/应用程序指定这一列属性。作为另一个展示混合串处理比单纯单字节字符串处理复杂性更高的例子,考虑“子串”函数。这一个串算子允许以指定起始字节位置和长度来选择一个字符串的一部分。在单纯与混合串截断中遇到的相同处理差别也作用在子串函数上。如果从一个单纯的单字节值中选择一个子串,只须在串中扫描到第n个字节(这里n是子串函数中指定子串的起始字符的参数)。然后选取这一字节和以后的m-1个字节作为结果即可(m是指定的子串长度,以字符为单位)。然而,如果所处理的是一个混合单字节与双字节串,则子串中第一与最后一个字节的性质必须加以确定才能保证子串中字符的合法性。这种复杂算法对性能的惩罚可能十分严。综上所述,上面的示例突出了单纯的单字节与混合单字节与双字节串之间的基本差别。单纯的单字节串中的每一字节都是一个字符。对于混合串中的任意一个字节在不了解该串中该字节以前的字节的性质时是无可奉告的。这一差别的后果是单纯单字节值(因而也是列)的串操作通常比对混合单字节与双字节值的同样操作更快更简单。从而,宣布一个列为单纯或混合的能力与对这一区别敏感的算法相结合,可产生显著的性能效益。从而,这便是FORSBCSDATA与FORMIXEDDATA的列说明的强大动力。在本发明的关系数据库系统中下述问题已得到特别展示和说明。提供了对SQL语言的一种扩充,允许用户/应用程序指定数据库表中的一列是否只包含单字节字符集数据或者混合单字节字符集数据和双字节字符集数据。指定是否一列中包含单字节字符集数据或混合数据是以指定字符数据类型(包括CHAR,VARCHAR,和LONGVARCHAR)的子类型来实现的。用户应用程序可以在建立或增加一列时在CREATETABLE语句或ALTERTABLE语句中指定该列中的字符数据的子类型为FORSBCS或FORMIXED或FORBIT数据。与指定子类型为单字节数据或混合数据同时,用户/应用程序还可以进一步指定数据库中的表中的一列所用的码页。在本发明的数据库管理程序的内部,子类型是以存储在数据库系统目录中的字符数据类型的码页属性的表示来记载的。这种编码方案为确定一列是否只含单字节字符集数据或混合数据提供了一种高效方法,同时只要简单地查询数据库系统目贾械穆胍沉斜憧闪私飧昧兴捎玫恼仿胍场虽然,上述发明是以其优选的实施例为参考而特意展示和说明的,对于熟悉本技术者不言而喻,可以作形式上的其他变化而并不脱离权利要求书的范围。权利要求1.一种含有单字节字符集数据与双字节字符集数据的混合数据的关系数据库系统,其特征在于所述关系数据库系统包括至少一个表中的至少一个列;以及用于扩充关系数据库语言以指定所述至少一个表中的所述至少一列中是否只含有单字节字符集数据的方法。2.权利要求1的系统,其特征在于扩充关系数据库语言的所述方法包括用于在该语言的在关系数据库系统中建立表的语句中指定一个字符数据类型的一个子类型的方法。3.权利要求1的系统,其特征在于所述扩充关系数据库语言的方法包括用于在该语言的在关系数据库的表中增加到的语句中指定一个字符数据类型的子类型的方法。4.权利要求1的系统,其特征在于指定所述至少一个列中所使用的一个码页的方法。5.权利要求1的系统,其特征在于所述扩充语言的方法包括扩充SQL语言的CREATETABLE语言的方法,用于指定所述至少一个表中的所述至少一个列中是否只含有单字节字符集数据。6.权利要求1的系统,其特征在于用于扩充语言的所述方法包括用于扩充SQL语言的ALTERTABLE语句的方法,用于指定所述至少一个表中的所述至少一个列中是否只含有单字节字符集数据。7、一种含有单字节字符集数据和双字节字符集数据的混合数据的关系数据库系统,其特征在于所述关系数据库系统包括至少一个表中至少一个列,以及用于扩充关系数据库语言的方法,用于为所述至少一个表中的至少一个列指定一个码页标识符。8.权利要求7的系统,其特征在于所述扩充语言的方法包括用于扩充SQL语言的CREATETABLE语句的方法,用于指定所述至少一个表中的所述至少一个列的一个码页标识符。9.权利要求7的系统,其特征在于所述扩充语言的方法包括扩充SQL语言的ALTERTABLE语句的方法,用以为所述至少一个表中的所述至少一个列指定一个码页标识符。10.一种含有单字节符符集数据和双字节字符集数据的混合数据的关系数据库系统,其特征在于在所述关系数据库系统包括至少一个表中的多个列;以及用于指定所述列中之一为单字节字符集数据的方法。11.权利要求10的系统,其特征在于所述用于指定的方法包括用于指定所述列中的所述一个列为FORSBCSDATA的方法。12.权利要求10的系统,其特征在于用于指定的方法包括用于指定一个字符数据类型的子类型的方法。13.权利要求10的系统,其特征在于所述列中的所述一个列在表建立时被指定为只含单字节字符集数据。14.权利要求10的系统,其特征在于所述列中的所述一个列在将所述该列增加到所述表中时被指定为只含单字节字符集数据。15.权利要求10的系统,其特征在于一个第二方法用于指定所述列中的另外一个列含有单字节字符集数据与双字节字符集数据的混合数据。16.权利要求15的系统,其特征在于所述列中的所述另外一个列被指定为FORMIXEDDATA。17.权利要求15的系统,其特征在于所述列中的所述另外一个列在表建立时被指定为单字节字符集数据和双字节字符集数据的混合数据。18.权利要求15的系统,其特征在于所述列中的所述另外一个列在所述列中的所述该另外一个列增加到所述表中时被定义为单字节字符集数据与双字节字符集数据的混合数据。19.一种含有单字节字符集数据和双字节字符集数据的混合数据的关系数据库系统,其特征在于在所述关系数据库系统中包括至少一个表中的多个列;以及用于指定所述列中的至少一个列的字符数据类型的子类型的方法;以及用于在多个数据库系统目录中的一个中用至少一个码页属性来记录该子类型的方法。20.权利要求19的系统,其特征在于用于查询所述数据库系统目录中的至少一个目录的方法,以同时确定用于该列的码页与该列是否只含单字节字符集数据。21.一种含有单字节字符集数据和双字节字符集数据的混合数据的关系数据库系统,其特征在于在所述关系数据库系统中包括至少一个表中的多个列;以及用于指定所述列中的至少一个的字符数据类型的子类型以标记所述列为含有字符集数据及混合数据的方法;以及用于在多个数据库系统目录中之一以至少一个码页属性来记录该子类型的方法。22.一种关系数据库,其特征在于在所述数据库中包括多个数据列;用于为所述列中的至少一个指定一个第一码页的方法;用于为所述列中的至少另外一个列指定一个第二码页的方法。23.一种包括多个含有双字节字符集数据和单字节字符集数据的数据列的关系数据库系统,其特征在于用于所述双字节数据和单字节数据的一个第一处理算法;用于指定一组所述多个列为单字节数据的方法;以及一个第二处理算法,快于所述第一处理算法,用于处理被指定为单字节数据的上述一组数据列。24.一种关系数菘庀低常涮卣髟谟冢在一个数据表中包括多个列;用于为上述多个列中的每一个指定多个字符数据类型的方法;以及用于指定所述字符数据类型的多个子类型的方法。25.权利要求24中的关系数据库系统,其特征在于在所述被指定的子类型的基础上用于处理所述列的数据的方法。26.权利要求24的关系数据库系统,其特征在于在所述关系数据库系统的一个SQLDA结构中,记录所述子类型的码页属性的方法。27.权利要求24的关系数据库,其特征在于用于在一个数据库系统目录的单字节码页列和双字节码页列中记录子类型的多个码页属性的方法。28.权利要求27的关系数据库,其特征在于用于查询数据库系统目录来同时确定所述列中任何一个的节字数据的子类型以及所述列中任何一个的多个码页属性的方法。29.一种用于处理含有混合数据的关系数据库系统中一列数据的方法,其特征在于标记一列数据为只含单字节字符集数据;以及以一个第一算法处理该被标记的数据列,这一第一算法比用于处理混合数据列的一个第二算法更快。30.一种用于处理含有混合数据的关系数据库系统中的数据列的方法,其特征在于在关系数据库系统中建立一个表的一个语句中,指定列的字符数据类型的一个子类型;以及在关系数据库系统的一个系统目录中,存储以字符数据类型的至少一个码页属性表示的子类型。31.权利要求30的方法,其特征在于查询系统目录以同时确定该列的子类型和该列的码页的步骤。32.权利要求30的方法,其特征在于在所述语句中为该列指定至少一个码页的步骤。33.在含有混合数据的关系数据库系统中处理一列数据的一种方法,其特征在于在关系数据库系统的一个已存在的表中增加列的语句中,为该列指定字符数据类型的一个子类型;并且在关系数据库系统的一个系统目录中,存储以字符数据类型的至少一个码页属性表示的子类型。34.权利要求33的方法,其特征在于查询系统目录以同时确定该列的子类型和该列的一个码页的步骤。35.权利要求33的方法,其特征在于在所述语句中为该列指定至少一个码页的步骤。36.在含有混合数据的关系数据库系统中用于处理一列数据的方法,其特征在于下述步骤为该列指定字符数据类型的一个子类型;以及在一个系统目录的一个单字节码页列中记录一个标识一个码页的第一值,并且当该子类型为单字节字符集数据时,在该系统目录的双字节码页列中记录一个为零的第二值。37.在含有混合数据的关系数据库系统中用于处理一列数据的一种方法,其特征在于下述步骤为该列指定字符数据类型的一个子类型;并且在一个系统目录的一个单字节码页列中记录标识一个第一码页的一个第一值,并且当子类型为含有单字节字符集数据和双字节字符集数据的混合数据时,在该系统目录的一个双字节码页列中记录标识一个第二码页的一个第二值。全文摘要在本发明的关系数据库系统中,提供了对SQL语言的一种扩充,允许用户/应用程序指定数据库表中的一列是否只包含单字节字符集数据,或者混合的单字节字符集数据和双字节字符集数据。指定一列中是否含有单字节字符集数据或混合数据是以指定字符数据类型(包括CHAR,VARCHAR和LONGVARCHAR)的子类型来实现的。用户应用程序可以在该列建立时或增好时在CREATETA-BLE语句或ALTERTABLE语句中指定FORSBCS或FORMIXD来指定一列中字符数据的子类型。文档编号G06FGK1037603SQ89102088公开日1989年11月29日申请日期1989年4月8日优先权日1988年4月8日发明者菲利浦·恩唐·常,罗伯特·威廉·英格利斯,大卫·弗兰西斯·奥伯曼,玛丽·凯思琳·特鲁伯申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1