BCB调用ORACLE 8的存储过程的问题!!!!

yiwei 2001-02-12 05:23:00
存储过程如下:
CREATE OR REPLACE PROCEDURE insert_into_calllog
(
use_line_no IN INT,
calling_number IN VARCHAR,
called_number IN VARCHAR,
area_code IN INT,
new_record_id OUT INT
)
AS
BEGIN
INSERT INTO calllog (logid,uselineno,callingnumber,callednumber,areacode)
VALUES (account_seed_calllog.nextval,use_line_no,calling_number,called_number,area_code);
SELECT account_seed_calllog.currval INTO new_record_id FROM calllog;
END;
BCB里用TADOStoredProc调用代码如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString a;
int t=0;
a="55555555";
test->Parameters->CreateParameter("use_line_no",ftInteger,pdInput,sizeof(int),10);
test->Parameters->CreateParameter("calling_number",ftString,pdInput,9,a);
test->Parameters->CreateParameter("called_number",ftString,pdInput,9,a);
test->Parameters->CreateParameter("area_code",ftInteger,pdInput,sizeof(int),10);
test->Parameters->CreateParameter("new_record_id",ftVariant,pdOutput,sizeof(int),10);
test->ExecProc();
ShowMessage((AnsiString)test->Parameters->ParamValues["new_record_id"]);

}
问题是,这段代码初次运行时(第一次建表,建SEQUENCE,空表时),没有问题,可以得到SEQUENCE的值1;再次运行就会出错,开始是exact fetch returns more than requested number of rows,如果不关闭程序,再来一次,就是wrong number or type of arguments in call to 'INSERT_INTO_CALLLOG'。

高手帮帮忙,怎么办啊?
...全文
225 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mycode 2001-02-22
  • 打赏
  • 举报
回复
兄弟,SELECT account_seed_calllog.currval INTO new_record_id FROM calllog;
如果calllog中不只有一条记录,会返回多条记录的,难道Oracle数据库不出给来一个too many rows的错误,应该将表改成dual就可以.
我没有用bcb开发过程序,不过我怀疑你程序修改后结果的正确性.

对与移植性问题,采用设计模式中的策略模式,也许能解决你的问题.
yiwei 2001-02-22
  • 打赏
  • 举报
回复
对对对,我还忘了,确实是改成了FROM DUAL的。
yiwei 2001-02-21
  • 打赏
  • 举报
回复
没有人理我啊?????
yiwei 2001-02-16
  • 打赏
  • 举报
回复
拜托,看到了请回复!!!!!
yiwei 2001-02-15
  • 打赏
  • 举报
回复
这个问题可能有点大,没关系,我可以加分,请大家广泛讨论
yiwei 2001-02-15
  • 打赏
  • 举报
回复
可惜了这50分,不如我们来讨论一下其他问题吧,我提一个:
不同数据库后台间移植数据库前台程序,要注意哪些问题,怎么解决不同DBMS之间的不兼容?

比如我在SQL SERVER里,可以使用IDENTITY来生成自动编号,在ORACLE里就只能用SEQUENCE和TIGGER来实现,那我的前台系统如何适应不同的DBMS,数据库设计时如何兼顾不同DBMS?
yiwei 2001-02-15
  • 打赏
  • 举报
回复
顶!
yiwei 2001-02-14
  • 打赏
  • 举报
回复
已经搞定了。
我把存储过程里SELECT那句放到前面,把两句里的NEXTVAL和CURRVAL交换一下,然后在BCB代码最后加上CLEAR(),就搞定了。
可是谁能告诉我为什么?放到前面为什么就可以?
yiwei 2001-02-14
  • 打赏
  • 举报
回复
怎么没有人理会????

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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