资源描述:
《sql server如何创建语言辅助函数--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Sqlserver如何创建语言辅助函数>> 在现在这样一个全球化环境中,因为在不同的语言中有很多不同的语法规则,所以以前很多简单的任务现在都变得很困难。你可以将一门特定的语言分成一组语法规则和针对这些规则的异常(以及一个基本词语),从而将这些任务一般化。在一些编程语言(比如Perl和Java)中,有一些公共域(domain)模块可以用来对文本完成语言转换。 下面给出一个稍微简单一点儿的例子,假设我们要将一个数字转换成其拼写版本(例如需要填写支票和法律合同)。这个诀窍在Oracle出现的早期已经有了,一般都以如下方式使用:selectto_char(to_date(12345,
2、'J'),'Jsp')fromdual; Tdual; FifthMayo 在为大多数语言生成数字时涉及的语法实际上相当简单。主体工作包括收集所有不同的语法规则并建立起足够的规则来生成正确的语法模式。(现在我将回避涉及到匹配数字和性别的问题。) 首先,我将创建两个表:第一个表保存基本的单词和异常,第二个表保存用于生成文本的一些简单的模板模式。如果在第一个表中有数字,那么我的语言函数就返回那个文本。对于其它每个数字,我将试图在一系列模式中匹配它,并应用一个模板来生成正确的文本。createtablenum integer, a
3、rykey(lang,num) ); createtablenumrules ( lang varchar2(2), seq integer, p1 integer, p2 integer, temp0 varchar2(30), temp varchar2(30), constraintnumrules_pkprimarykey(lang,seq) ); 下面是生成一个数字拼写版本所需的代码。这里我将按照基数来(比如1、2和3);而事实上,这些函数可以通过为每种语言列出更多异常和模式来生成序数(第1、第2、第
4、三)和复数版本。REM--createatableofbaseber)returnvarchar2; functioncardinal(nnumber)returnvarchar2; endgenber)returnvarchar2 is l_num=n; returnl_ber)returnvarchar2 is pnumber; --poplate vnumber; --lowords.word%type; begin ifn<0then l_word:=get_word(
5、-1); ifl_wordisnullthen returnnull; endif; returnl_word
6、
7、''
8、
9、cardinal(-n); endif; l_word :=get_word(n);123下一页>>>>这篇文章来自..,。ifl_numrules od(n,p); ifrop0,'~2',cardinal(v)); endif; else ifv=0th
10、en returnreplace(rop0,'~1',cardinal(n/p)); else returnreplace(replace(nvl(rop,'~1~2'), '~1',cardinal(n-v)), '~2',cardinal(v)); endif; endif; endif; endloop;
11、return'NUMBERTOOLARGE'; endcardinal; endgenillion和millionmillion代替billion和trillion(美国用法),在美国之外这两个短语通常是混淆的。这些数据对生成-999,999,999,999到999,999,999,999之间所有整数(包括零)的拼写版本已经足够了。REM--createatableofbaseber)returnvarchar2; functioncardinal(