请教存储过程中的循环出现的问题

shijies 2009-06-25 07:22:52
fb数据库的存储过程,i是一个变量,K是一个传入的参数,:tzhuyi也是一个传入的日期参数,以下代码希望在一段时期内插入或更新rj表的zhuyi字段。
create or alter procedure NEW_PROCEDURE (
TZHUYI date,
K integer,
ZHUYI varchar(10),
JILU varchar(10),
SHIJIAN date)
as
declare variable I integer;
begin
i=0;
while (i<=k) do
begin
if (exists (select shijian from rj where shijian=:tzhuyi+i)) then //这里出了问题。
insert into rj (shijian, jilu, zhuyi) values (:shijian,:jilu,:zhuyi);
else
update rj
set zhuyi=:zhuyi;
i=i+1;
end
end


Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
I.
At line 13, column 58.



改成下面这样,还是不行。
create or alter procedure NEW_PROCEDURE (
TZHUYI date,
K integer,
ZHUYI varchar(10),
JILU varchar(10),
SHIJIAN date not null)
as
declare variable I integer;
begin
i=0;
while (i<=k) do
begin
if (exists (select shijian from rj where shijian=:Tzhuyi+i)) then
insert into rj (shijian, jilu, zhuyi) values (:shijian,:jilu,:zhuyi);
else
update rj
set zhuyi=:zhuyi
where
shijian=:shijian;
i=i+1;
end
end

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
I.
At line 13, column 58.
...全文
28 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
faguan 2009-06-26
  • 打赏
  • 举报
回复

TZHUYI date,
K integer,
ZHUYI varchar(10),
JILU varchar(10),
SHIJIAN date

改为:
@TZHUYI date,
@K integer,
@ZHUYI varchar(10),
@JILU varchar(10),
@SHIJIAN date
付值后再PRINT一下试试
yjytiantang 2009-06-26
  • 打赏
  • 举报
回复
你单调一下,看看那些变量有没有赋值,或者类型是不是不匹配?
shijies 2009-06-26
  • 打赏
  • 举报
回复
请再帮着看看。
虎滴小猪猪 2009-06-26
  • 打赏
  • 举报
回复
??
cmdream 2009-06-26
  • 打赏
  • 举报
回复
循环用游标
faguan 2009-06-26
  • 打赏
  • 举报
回复
存储过程改为如下:
alter procedure NEW_PROCEDURE (
@TZHUYI date,
@K integer,
@ZHUYI varchar(10),
@JILU varchar(10),
@SHIJIAN date)
as
declare @i integer;
begin
set@i=0
while (@i <= @k) do
begin
if (exists (select shijian from rj where shijian=@tzhuyi+@i)) then //这里出了问题。
insert into rj (shijian, jilu, zhuyi) values (@shijian,@jilu,@zhuyi)
end
else
begin
update rj
set zhuyi=@zhuyi
@i=@i+1
end
end
由于不知道你具体有什么条件,所以只能就你给出的存储过程来改!
lgx0914 2009-06-26
  • 打赏
  • 举报
回复
不太明白楼主的意思,不过如果你想让传入的tzhuyi参数加i的话,可以用DataAdd函数,fb中的日期函数和SqlServer中的函数是一样的
lgx0914 2009-06-26
  • 打赏
  • 举报
回复
Column does not belong to referenced table.
把表结构贴出来
虎滴小猪猪 2009-06-26
  • 打赏
  • 举报
回复
传入的参数应该加@吧?不是很会,跟着学习
if (exists (select shijian from rj where shijian=:tzhuyi+i)) then //这里出了问题。
这里的shijian应该是表的字段吧,但是传入的参数也有个SHIJIAN,可能冲突了。

create or alter procedure NEW_PROCEDURE (
@TZHUYI date,
@K integer,
@ZHUYI varchar(10),
@JILU varchar(10),
@SHIJIAN date)
as
declare variable I integer;
declare @tableshijian date;
begin
i=0;
while (i <=k) do
begin
select @tableshijian = shijian from rj where shijian=@tzhuyi+1
if @@rowcount > 0
begin
insert into rj (shijian, jilu, zhuyi) values (@tableshijian,@jilu,@zhuyi);
end
else
update rj set zhuyi=@zhuyi;
i=i+1;
end
end

不知道我写的对不对哦

2,498

社区成员

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

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