急死我了!(数据库大师请进)(100分)

  • 主题发起人 主题发起人 smp
  • 开始时间 开始时间
S

smp

Unregistered / Unconfirmed
GUEST, unregistred user!
DB:ORACLE8
DELPHI3

我在SERVER端建立了如下的存储过程:

create function maxoftable(tablename IN CHAR)
RETURN NUMBER
IS
maxri NUMBER(10);
BEGIN
SELECT max_ri INTO maxri FROM rioftable WHERE table_name=tablename;
RETURN(maxri);
END;

create function minoftable(tablename IN CHAR)
RETURN NUMBER
IS
minri NUMBER(10);
BEGIN
SELECT min_ri INTO minri FROM rioftable WHERE table_name=tablename;
RETURN(minri);
END;

create or replace procedure insert_statofday(indate IN DATE,inok IN NUMBER,innok_user IN NUMBER,innok_data IN NUMBER,
innok_service IN NUMBER)
AS
inri NUMBER(10);
minri NUMBER(10);
BEGIN
IF (maxoftable('STATOFDAY')-minoftable('STATOFDAY'))>363 THEN
DELETE FROM STATOFDAY WHERE RI=minoftable('STATOFDAY');
inri:=maxoftable('STATOFDAY')+1;
minri:=minoftable('STATOFDAY')+1;
INSERT INTO STATOFDAY(stat_date,ok,nok_usr,nok_data,nok_service,ri) VALUES(indate,inok,innok_user,innok_data,innok_service,inri);
UPDATE RIOFTABLE SET MIN_RI=minri WHERE TABLE_NAME='STATOFDAY';
UPDATE RIOFTABLE SET MAX_RI=inri WHERE TABLE_NAME='STATOFDAY';
ELSE
inri:=maxoftable('STATOFDAY')+1;
INSERT INTO STATOFDAY(stat_date,ok,nok_usr,nok_data,nok_service,ri) VALUES(indate,inok,innok_user,innok_data,innok_service,inri);
UPDATE RIOFTABLE SET MAX_RI=inri WHERE TABLE_NAME='STATOFDAY';
END IF;
END insert_statofday;

在CLIENT通过SQL*PLUS全部试验通过。
可是如下程序却不能通过,为什么??(是不是ODBC的问题????)

StoreProc1.prepared:=True;
StoreProc1.Prepare;

StoreProc1.ParamByName('indate').AsDateTime:=time;
StoreProc1.ParamByName('inok').AsInteger:=1;
StoreProc1.ParamByName('innok_user').AsInteger:=2;
StoreProc1.ParamByName('innok_data').AsInteger:=3;
StoreProc1.ParamByName('innok_service').AsInteger:=4;
StoreProc1.ExecProc;(此时报错)

恳请各位专家能够帮助本人诊断,本人将不胜感激。(如果有类似环境的话
请大家帮忙试运行一下,好吗?)
 
是否还得在编辑/插入状态,就象Table在Post之前必须有Insert or Edit之类的
行为呢?
 
什么错呀?搞清楚是SP错还是DELPHI错
 
如果在SQL PLUS下测试通过的话,存储过程本身不该有问题
我看问题是否与你的
StoreProc1.ParamByName('inok').AsInteger:=1;
~~~~~~~~
StoreProc1.ParamByName('innok_user').AsInteger:=2;
~~~~~~~~
........
有关呢, 是否该用 AsFloat
我刚把ORACLE8删除,无法帮你
 
不知为什么?我与数据库连上以后,STOREDPROCEDURE控件只能看见一个存储过程,
仍以上述程序为例,StoreProc1的STOREPROCEDURE属性中居然是如下内容:
INSER
INSERT
INSERT_
INSERT_S
INSERT_ST
INSERT_STA
INSERT-STAT
INSERT_STATOFDAY

而我的数据库中根本就没有那些“INSERT_STATOFDAY"的子串的存储过程。
为什么????
 
在SQL*Plus中
select object_name from user_objects
where object_type=upper('procedure');
如果验证你的storedprocedure存在,那么我怀疑你的delphi有问题

我在Oracle7.3 for OpenVMS(Alpha)下使用一切正常
 
请继续讨论或结束问题
如连不上:
http://202.120.85.61/DELPHIBBS/
 
你的BDE是什么版本 5.0 or 5.01, 还有
你用下列方法能否完成.
Query1.SQL.text := 'execute procedure insert_statofday(:indate,'
+':inok ,:innok_user :innok_data,:innok_service)';
Query1.ParamByName('indate').AsDateTime:=Date;
Query1.ParamByName('inok').AsInteger:=1;
Query1.ParamByName('innok_user').AsInteger:=2;
Query1.ParamByName('innok_data').AsInteger:=3;
Query1.ParamByName('innok_service').AsInteger:=4;
Query1.ExeSQL;
 
刚刚发现你用的是Delphi3 , 你的BDE 需要升级!!
如果不想升级, 试试我提供的直接用TQuery的方法.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
602
import
I
I
回复
0
查看
720
import
I
I
回复
0
查看
738
import
I
后退
顶部