编写sybase存储过程遇到的问题

逗你玩2013 2013-08-12 02:47:47
意图:为表的主键列,模拟实现sybase没有sequence功能,所有保存最新主键列取值的表的名字都是pkv_+'主键列名',pkv_开头的表都有一个pkv_value记录主键列当前值

程序思路:主键列取值之前,先上pkv_打头的表看看:
如果没有记录,就向表里插入新的pkv_value
如果有记录,就将表中的pkv_value+1


create procedure check_seq
(
@c_name varchar(30) in,--主键列列名
@c_value varchar(16) output--主键列应取的值
)
as
declare @pk_value int
declare @v_count1 int
declare @sql_text1 varchar(2000)
declare @sql_text2 varchar(2000)
declare @sql_text3 varchar(2000)
declare @sql_text4 varchar(2000)
begin
select @sql_text1='select count(1) into @v_count1 from pkv_'+@c_name
select (@sql_text1)
execute (@sql_text1)
if @v_count1 = 0
begin
select @sql_text2='insert into pkv_'+@c_name+' values (convert(varchar(16),1))'
execute (@sql_text2)
set @c_value=(convert(varchar(16),1))
end
else
begin
select @sql_text3='update pkv_'+@c_name+' set pkv_value=convert(varchar(16),convert(int,pkv_value)+1)'
execute (@sql_text3)
select @sql_text3='select pkv_value into @c_value from pkv_'+@c_name
execute (@sql_text3)
end
end

遇到的问题
程序编译通过
但是测试运行的时候就报错了

@v_count1附近有语法错误
@c_value附近有语法错误


以下是测试代码
declare @v_result varchar(16)
declare @v_name varchar(30)
select @v_name='wn_id'

execute check_seq @v_name,@v_result output

select (@sql_text1)打印出来是
select count(1) into @v_count1 from pkv_wn_id

究竟问题出在哪里,求高人指点
...全文
465 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumugulu 2014-07-09
  • 打赏
  • 举报
回复
sybase和oracle的语法还是很有些区别的。。。
wumugulu 2014-07-09
  • 打赏
  • 举报
回复
select @sql_text1='select count(1) into @v_count1 from pkv_'+@c_name ==》 select @sql_text1='select @v_count1 = count(1) from pkv_'+@c_name
lgjlry 2013-09-22
  • 打赏
  • 举报
回复
sql server 和 sybase 中存储过程的写法不一致。 你仔细看看,改一下吧。
逗你玩2013 2013-08-14
  • 打赏
  • 举报
回复
回1楼 你写的我之前改过 改完之后编译直接报错
ceozenliu 2013-08-12
  • 打赏
  • 举报
回复
不太懂你的意思,不過看起來: (1) @v_count1是int, 不能做為TABLE-NAME. (2) @v_count1沒有初始值 再來 select @sql_text1='select count(1) into @v_count1 from pkv_'+@c_name 應該改成 select @sql_text1='select count(1) into '+@v_count1+' from pkv_'+@c_name 另外一個錯誤,應該也類似

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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