编写sybase存储过程遇到的问题
意图:为表的主键列,模拟实现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
究竟问题出在哪里,求高人指点