PB调存储过程

MAGICSLIAO 2003-05-07 01:37:14
CREATE OR REPLACE PROCEDURE PRC_TEST_YL(pathpart_id in int,str_sql out string)
IS
BEGIN
str_sql:='syxh'||to_char(pathpart_id);
END PRC_TEST_YL;
我建立了这样一个存储过程.
我在PB中这样写:
...
Declare getsql procedure for PRC_TEST_YL :iSubPath_id,:str_sql OUTPUT;
EXECUTE getsql;
fetch getsql into :str_sql;
close getsql;
mle_sql.text=str_sql;
...
但是得不到值,这是为什么?
...全文
54 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxh761031 2003-05-07
  • 打赏
  • 举报
回复
根据你创建的存过:
CREATE OR REPLACE PROCEDURE PRC_TEST_YL(pathpart_id in int,str_sql out string)
IS
BEGIN
str_sql:='syxh'||to_char(pathpart_id);
END PRC_TEST_YL;
在 PB中动态调用即可,SCRIPT如下:
string li_text

declare p_1 dynamic procedure for sqlsa;
prepare sqlsa from "execute prc_test_yl @str_sql =?";
execute dynamic p_1 using:li_text;

do while sqlca.sqlcode=0
fetch p_2 into:li_text;
loop
sle_1.text=li_text

执行这段代码即可返回存储过程的输出参数

MAGICSLIAO 2003-05-07
  • 打赏
  • 举报
回复
我是这么写的,但是返回值为空啊。
shahand 2003-05-07
  • 打赏
  • 举报
回复

使用存储过程与使用游标类似
1.创建一个过程
CREATE PROCEDURE ProcedureName(IN in_parameter in_parameterType,
OUT out_Parameter out_ParameterType)
BEGIN
......
END
其中所有的参数都是可选的
例如:
CREATE PROCEDURE StuMale(IN Sex char(2))
BEGIN
SELECT Student.Name , Student.no
FROM Student
WHERE Student.Sex = Sex;
END

2.声明过程 与游标 DECLARE 类似
DECLARE PorcedureName PROCEDURE FOR StoreProcedureName(ParameterList =
InitValueList) {USING TransactionObject}

3.执行过程 与游标 EXECUTE 类似
EXECUTE ProcedureName;

4.读取 FETCH ProcedureName INTO VariableList

5.关闭 CLOSE ProcedureName
shahand 2003-05-07
  • 打赏
  • 举报
回复
定义与执行Oracle中的存储过程

ORACLE中有函数与存储过程,其调用规则类似。下例中的函数除了返回一个值外,功能与上面的存储过程基本一样。在本例中,调用一个返回一个系统日期值的函数。

1. 创建函数

String sp_syntax
sp_syntax = &
"Create Function auths_fn( InArg IN integer,OutArg OUT integer) "+&
"Return Date as "+&
" Foo Date; "+&
"Begin "+&
" Select Count(*) into OutArg from auths"+&
" where sex = InArg ;"+&
" Foo := SYSDATE; "+&
" Return(Foo); "+&
"End auths_fn ; "
Execute Immediate :sp_syntax;
MessageBox("Create Oracle Stored Function", +&
" SqlCode= "+String(SQLCA.SqlCode)+&
"~n SqlDBCode= "+String(SQLCA.SqlDBCode)+&
"~nSqlErrText= "+SQLCA.SqlErrText)

2. 定义该函数

integer InArg, OutArg
DateTime ReturnDateArg
ReturnDateArg = DateTime(Date("96/12/02"),Time("01:02:03"))
Declare MyFoun procedure for auths_fn(:InArg);

3. 执行定义好的函数

Execute MyFoun;
MessageBox("Execute Stored Function", +&
" SqlCode= "+String(SQLCA.SqlCode)+&
"~n SqlDBCode= "+String(SQLCA.SqlDBCode)+&
"~nSqlErrText= "+SQLCA.SqlErrText)
Fetch MyFoun into :ReturnDateArg,:OutArg ;
MessageBox("Fetch Stored Function", +&
" SqlCode= "+String(SQLCA.SqlCode)+&
"~n SqlDBCode= "+String(SQLCA.SqlDBCode)+&
"~nSqlErrText= "+SQLCA.SqlErrText)

4. 关闭函数并显示函数返回的结果

Close MyFoun;
MessageBox("myproc returned", "OutArg1 = "+String(OutArg1)+&
"~nOutArg2 = "+OutArg2+"~nReturnDateArg = "+String(ReturnDateArg))

5. 删除函数

Execute Immediate "Drop Function auths_fn";

  通过前面的例子我们可以看出:不同的数据库系统支持的存储过程的形式和功能都有一定的差别,但是它们在PowerBuilder中的定义和执行都一样。存储过程可以返回一组值,也可以返回一个结果集,用户可以将存储过程返回的数据直接拿来处理,也可以传给数据窗口(使用外部数据源的数据窗口)。

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧