当前位置:文档之家› PB中调用存储过程

PB中调用存储过程

PB中调用存储过程
2010-03-09 14:33
PB中调用存储过程
PB技术 2009-11-13 10:35:55 阅读78 评论0 字号:大中小

DECLARE ProcedureName PROCEDURE FOR StoredProcedureName
@Param1=Value1, @Param2=Value2,... {USING TransactionObject} ;
注意:ProcedureName为PB中的变量,StoredProcedureName为数据库中的存储过程名,Param
为数据库存储过程参数名,Value为PB中的变量。

⑵ EXECUTE ProcedureName ;
⑶ FETCH Procedure INTO HostVariableList ;
⑷ CLOSE ProcedureName ;
例子:
DATETIME ldt_cdt
DECLARE getdate PROCEDURE FOR p_get_date;
EXECUTE getdate;
FETCH getdate INTO :ldt_cdt;
CLOSE getdate;
RETURN ldt_cdt
//THE END
如果存储过程有返回值,则需要使用动态SQL语句,利用SQLSA,SQLDA
: 之类的全局变量。

你可以用关键字“Dynamic SQL”来查找帮助。

通过测试发现,在PB中调用存储过程跟数据库的连接方式有关系,在此测试了通过直连和ODBC两种方式的调用方法:
String ls_tablename="TestTable"
String ls_columnname="TestColumn"
Long ll_newid
//直连方式
DECLARE sp_test PROCEDURE FOR dbo.up_getnewid @TableName
= :ls_tablename,@TableColumn = :ls_columnname;
////ODBC
//DECLARE sp_test PROCEDURE FOR
dbo.up_getnewid(:ls_tablename,:ls_columnname);
//PB调用带返回值的存储过程:////声明储存过程:
CREATE PROCEDURE proc_pslx ( @NAME varchar(2) ,@count integer output) AS
select @count = Count(*) from wo_info where whs_name=@NAME ;
GO
////在PB中调用:
Integer li_rtn
DECLARE lpro_test PROCEDURE FOR proc_pslx @name='C1', @count = :li_rtn OUTPUT;
EXECUTE lpro_test;
Fetch lpro_test INTO :li_rtn;
messagebox("",string(li_rtn))。

相关主题