光标 "fetch next from" - 来自附近的语法错误
Cursor "fetch next from" - syntax error near from
我想创建程序,使用光标向我显示 20% 折扣的产品。编译下面的代码后,我收到错误消息
"Syntax error near "FROM" 第 14 行。我正在使用 Sybase。有人可以帮我解决这个问题吗?
这是我的代码:
CREATE PROCEDURE "ProduktyPoZnizce20procent2"( /* @parameter_name parameter_type [= default_value] [OUTPUT], ... */ )
AS
BEGIN
declare @IDPR INTEGER
declare @typ VARCHAR(30)
declare @model varchar(30)
declare @cena float
DECLARE ProductCursor CURSOR FOR
SELECT IDProduct from Product
Open ProductCursor
FETCH NEXT FROM ProductCursor
INTO @IDPR
while(@@FETCH_STATUS = 0)
BEGIN
select @typ = Product.product_type, @model=Product.name, @cena = Product.price * 0.8
from Product
where @IDPR = Product.IDProduct
print(cast(@typ as nvarchar(30)) + ' ' + cast(@model as nvarchar(30)) + ' = ' + cast(@cena as varchar(10)))
FETCH NEXT FROM ProductCursor INTO @IDPR
END
close ProductCursor
DEALLOCATE CURSOR ProductCursor
END
您要做的就是
SELECT Cast(Product.product_type AS NVARCHAR(30))
+ " " + Cast(Product.NAME AS NVARCHAR(30))
+ " = "
+ Cast(Product.price * 0.8 AS VARCHAR(10))
FROM Product
经过对 sysbase 中 cursor
的一些研究。我认为
FETCH NEXT FROM ProductCursor INTO @IDPR
应该是
fetch ProductCursor into @IDPR
DEALLOCATE ProductCursor
应该是
deallocate cursor ProductCursor
为了检查循环@@FETCH_STATUS
中的记录应该是@@sqlstatus
/* now loop, processing all the rows
** @@sqlstatus = 0 means successful fetch
** @@sqlstatus = 1 means error on previous fetch
** @@sqlstatus = 2 means end of result set reached
*/
while (@@sqlstatus = 0)
Begin
..
End
在此处查看有关 sysbase http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc20020_1251/html/databases/X61512.htm
中 CURSOR
的更多信息
好的。我的代码中有 2 个错误:我没有使用光标前进。将我的光标发送到下一行的正确语法是
FETCH NEXT ProductCursor
INTO @IDPR
并且应该在循环前和循环中调用它。
接下来是在屏幕上正确打印结果。自
print(cast(@typ as nvarchar(30)) + ' ' + cast(@model as nvarchar(30)) + ' = ' + cast(@cena as varchar(10)))
屏幕上没有显示任何内容,必须由
替换
message (cast(@typ as nvarchar(30)) + ' ' + cast(@model as nvarchar(30)) + ' = ' + cast(@cena as varchar(10))) type status to client
整个代码现在看起来像这样:
CREATE PROCEDURE "ProduktyPoZnizce20procent2"( /* @parameter_name parameter_type [= default_value] [OUTPUT], ... */ )
AS
BEGIN
declare @IDPR INTEGER
declare @typ VARCHAR(30)
declare @model varchar(30)
declare @cena float
DECLARE ProductCursor CURSOR FOR
SELECT IDProduct from Product
Open ProductCursor
FETCH NEXT ProductCursor
INTO @IDPR
while(@@FETCH_STATUS = 0)
BEGIN
select @typ = Product.product_type, @model=Product.name, @cena = Product.price * 0.8
from Product
where @IDPR = Product.IDProduct
message(cast(@typ as nvarchar(30)) + ' ' + cast(@model as nvarchar(30)) + ' = ' + cast(@cena as varchar(10))) type status to client
FETCH NEXT ProductCursor
INTO @IDPR
END
close ProductCursor
DEALLOCATE CURSOR ProductCursor
END
我想创建程序,使用光标向我显示 20% 折扣的产品。编译下面的代码后,我收到错误消息 "Syntax error near "FROM" 第 14 行。我正在使用 Sybase。有人可以帮我解决这个问题吗? 这是我的代码:
CREATE PROCEDURE "ProduktyPoZnizce20procent2"( /* @parameter_name parameter_type [= default_value] [OUTPUT], ... */ )
AS
BEGIN
declare @IDPR INTEGER
declare @typ VARCHAR(30)
declare @model varchar(30)
declare @cena float
DECLARE ProductCursor CURSOR FOR
SELECT IDProduct from Product
Open ProductCursor
FETCH NEXT FROM ProductCursor
INTO @IDPR
while(@@FETCH_STATUS = 0)
BEGIN
select @typ = Product.product_type, @model=Product.name, @cena = Product.price * 0.8
from Product
where @IDPR = Product.IDProduct
print(cast(@typ as nvarchar(30)) + ' ' + cast(@model as nvarchar(30)) + ' = ' + cast(@cena as varchar(10)))
FETCH NEXT FROM ProductCursor INTO @IDPR
END
close ProductCursor
DEALLOCATE CURSOR ProductCursor
END
您要做的就是
SELECT Cast(Product.product_type AS NVARCHAR(30))
+ " " + Cast(Product.NAME AS NVARCHAR(30))
+ " = "
+ Cast(Product.price * 0.8 AS VARCHAR(10))
FROM Product
经过对 sysbase 中 cursor
的一些研究。我认为
FETCH NEXT FROM ProductCursor INTO @IDPR
应该是
fetch ProductCursor into @IDPR
DEALLOCATE ProductCursor
应该是
deallocate cursor ProductCursor
为了检查循环@@FETCH_STATUS
中的记录应该是@@sqlstatus
/* now loop, processing all the rows
** @@sqlstatus = 0 means successful fetch
** @@sqlstatus = 1 means error on previous fetch
** @@sqlstatus = 2 means end of result set reached
*/
while (@@sqlstatus = 0)
Begin
..
End
在此处查看有关 sysbase http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc20020_1251/html/databases/X61512.htm
中CURSOR
的更多信息
好的。我的代码中有 2 个错误:我没有使用光标前进。将我的光标发送到下一行的正确语法是
FETCH NEXT ProductCursor
INTO @IDPR
并且应该在循环前和循环中调用它。
接下来是在屏幕上正确打印结果。自
print(cast(@typ as nvarchar(30)) + ' ' + cast(@model as nvarchar(30)) + ' = ' + cast(@cena as varchar(10)))
屏幕上没有显示任何内容,必须由
替换message (cast(@typ as nvarchar(30)) + ' ' + cast(@model as nvarchar(30)) + ' = ' + cast(@cena as varchar(10))) type status to client
整个代码现在看起来像这样:
CREATE PROCEDURE "ProduktyPoZnizce20procent2"( /* @parameter_name parameter_type [= default_value] [OUTPUT], ... */ )
AS
BEGIN
declare @IDPR INTEGER
declare @typ VARCHAR(30)
declare @model varchar(30)
declare @cena float
DECLARE ProductCursor CURSOR FOR
SELECT IDProduct from Product
Open ProductCursor
FETCH NEXT ProductCursor
INTO @IDPR
while(@@FETCH_STATUS = 0)
BEGIN
select @typ = Product.product_type, @model=Product.name, @cena = Product.price * 0.8
from Product
where @IDPR = Product.IDProduct
message(cast(@typ as nvarchar(30)) + ' ' + cast(@model as nvarchar(30)) + ' = ' + cast(@cena as varchar(10))) type status to client
FETCH NEXT ProductCursor
INTO @IDPR
END
close ProductCursor
DEALLOCATE CURSOR ProductCursor
END