- 存储过程(Procedure):大体分为两类
- 处理单条记录和运算并返回单条数据我称为:"单处理过程".
列:
SET TERM ^ ;
CREATE OR ALTER PROCEDURE DBST (
s varchar(1024) not null)
returns (
rs varchar(2048))
as
begin
rs=s||s;
suspend;
end^
SET TERM ; ^
select * from dbst('OK')
--------结果----------
OKOK - 处理多条记录返回单条统计记录或多条处理后数据的我称为:"集处理过程"
列:
SET TERM ^ ;
CREATE OR ALTER PROCEDURE DOUBLESTR
returns (
stfid integer,
stfname key_name)
as
begin
for
select staffid, staffname from ys_staff into : stfid, :stfname
do
begin
stfname=stfname||stfname;
suspend;
end
end^
SET TERM ; ^
- 处理单条记录和运算并返回单条数据我称为:"单处理过程".
- 外置函数:firebird内置函数不多,到2.5为止也不支持自定义函数,但firebird最强大也最迷人的是能很容易的支持外置函数标准函数.你可以找到很多现成的firebird的外置函数.也可以用vc delph gcc很容易的编写外置函数.
- 安装文件自带的外置函数:在目录/Udf下,有fbudf.dll ib_udf2.dll以及相应的sql外置函数注册命令,只需简单运行相应sql文件就能注册这些外置函数...
- 编写自己的外置函数,我用delphixe2 编写一个简单返回字符串MD5值的函数.
library BskyFBPub;
uses
System.SysUtils,
System.Classes,
Besky.md5,//这个文件将在下一篇专门来讲
//需要引入firebird的ib_util.pas
ib_util in 'X:\DataBase\Firebird_2_5\include\ib_util.pas';
{$R *.res}
function Md5str(s: Pansichar): Pansichar; stdcall;
var
ans: ansistring;
pach: Pansichar;
begin
ans := GetMD5StrOfString(s);
// GetMem(pach,32);
{ 用ib_util.pas的ib_util_malloc 代替 GetMem
分配的内存一定要比返回的制所需的内存大1,最好按8字节对齐
所以MD5至少需要分配33,按8字节对齐分配40
}
pach := ib_util_malloc(40);
StrPCopy(pach, ans);
Result := pach;
end;
exports
Md5str;
begin
end.
--------------
这里要注意:凡是要进行内存分配,且分配的内存是给函数的返回值,而需要firebird自己施放这个内存时,必须使用firebirdbin\ib_util.dll自带的内存分配函数.她的delphi引入单元文件和c的头文件都在目录\include下,在你的程序里引用即可.
unit ib_util;
interface
function ib_util_malloc(l: integer): pointer; cdecl; external 'ib_util.dll';
implementation
end.
这里用到的支持64位的 Besky.md5.pas将在下一篇专门讲述 - 注册这个函数到数据库.
DECLARE EXTERNAL FUNCTION MD5STR
CSTRING(20480)
RETURNS CSTRING(40) FREE_IT
ENTRY_POINT 'Md5str' MODULE_NAME 'BskyFBPub'; - 测试一下:
select staffid,staffname,md5str(staffname) as md5name from ys_staff - 存储过程和外置函数相结合有以下多项好处:
- 可以弥补C#和php托管、解释语言的不足.
- 可以降低对C#和php程序员的要求(当然至少需要一个高级的delphi或Vc程序员),实际上他们只需要简单调用firebird里现成的procedure就行,这对现在人才市场上有大量初级C#和php程序员而缺少高级delphi和vc程序现状来说极大的降低了公司招人和培训的难度.
- 可以容易的做到统一的数据格式而无论程序员使用什么开发语言.
- 可以容易的升级和更改后台数据处理,很容易做到一处更改,全局生效.
- 更多细节将在以后的多人开发框架里探讨.
- 安装文件自带的外置函数:在目录/Udf下,有fbudf.dll ib_udf2.dll以及相应的sql外置函数注册命令,只需简单运行相应sql文件就能注册这些外置函数...
- 为了能实现最终的多人开发框架,下面几篇将探讨几个这个框架的关键技术:加密、解密、压缩、多线程。之后我们将探讨客户端的关键javascrpt形成的框架。
转自http://blog.sina.com.cn/s/blog_53866d75010102g9.html