下面是我自己写的:table_maxid表结构:----名称-----数据类型---大小---小数位---是否为空?----默认值
tablename----varchar2----30---------------------------------
maxid----------number----10--------0------------------------
建表后,先插入一条记录:
insert into table_maxid (tablename,maxid) values ('table1',0);存储过程:testproc
(table_name in varchar2, newmaxid out number)
as
begin
update Table_MaxID set MaxID = MaxID + 1 where TableName=table_name;
select maxid into newmaxid from Table_MaxID where TableName=table_name;
end;调用:
execute testproc('table1');出错, 我就不会写了,呵呵,晕菜!!感谢楼上,一定结贴!!!
tablename----varchar2----30---------------------------------
maxid----------number----10--------0------------------------
建表后,先插入一条记录:
insert into table_maxid (tablename,maxid) values ('table1',0);存储过程:testproc
(table_name in varchar2, newmaxid out number)
as
begin
update Table_MaxID set MaxID = MaxID + 1 where TableName=table_name;
select maxid into newmaxid from Table_MaxID where TableName=table_name;
end;调用:
execute testproc('table1');出错, 我就不会写了,呵呵,晕菜!!感谢楼上,一定结贴!!!
解决方案 »
- 使用sqlplus为什么回显是2?
- ORA-00932: 数据类型不一致: 应为 -, 但却获得 BLOB
- oracle10g里面,存储过程里面可以传一个 集合对象的参数吗?
- 數據轉換(請教高手)
- oracle 9i 的备份恢复问题。
- oracle 9i 求段sql
- oracle8 Client 安装问题??
- LRM-00109:我不能够创建CREATE SPFILE FROM PFILE=‘……’时候遇到错误
- ORACLE817在扔REDHAT8安装,运行./runInstaller出现初始化JDK环境后出现please wait.....就没有任何反应了不知是不是JDK没有没有装好
- 如何配置oracle监听多个端口?
- 一个简单的Oracle查询语句的问题?
- 一个关于ORACLE9I的问题,请各位高手进来,急急急急急急!!!!!!!!!!!!
begin
Declare @length char(20),@tempid char(20),@tempkind Char(2),@templength int
Declare @tempint int
Declare @yy char(2),@mm char(2),@dd char(2),@tempdate char(6)
Declare ID_cursor Cursor For Select lastid,idname,idkind,idlength From autoid Where idname=@IDName
Open ID_cursor
Fetch Next From ID_cursor into @length,@tempid,@tempkind,@templength
set @length=rtrim(@length)
If @@FETCH_STATUS = 0
begin if @tempkind='1'
begin
set @yy=convert(char(2),right(year(getdate()),2))
set @mm=convert(char(2),month(getdate()))
if (len(@mm)=1)
set @mm='0'+@mm
set @dd=convert(char(2),day(getdate()))
if (len(@dd)=1)
set @dd='0'+@mm
set @tempdate=@yy+@mm+@dd
if @tempdate=left(@length,6)
begin
set @tempint=convert(int, right(rtrim(@length),4))
set @tempint= @tempint+1
set @IDString=@tempdate+left('0000',4-len(@tempint))+convert(char,@tempint)
end
else
begin
set @IDString=@tempdate+'0001'
end
end if @tempkind='2'
begin
if @length=null
begin
set @IDString='0001'
end
else
begin
set @tempint=convert(int,@length)
set @tempint= @tempint+1
set @IDString=left('0000',4-len(@tempint))+convert(char,@tempint)
end
end
If @tempkind='3'
begin
If (@length=null) or (isnumeric(@length)=0)
begin
set @IDString='000001'
end
else
begin
set @tempint=convert(int,@length)
set @tempint= @tempint+1
set @IDString=left('000000',6-len(@tempint))+convert(char,@tempint)
end
end end
close ID_cursor
deallocate ID_cursor
update autoid set lastid=@IDString where idname= @IDName
select lastid from autoid where idname= @IDName --客户编号加前缀‘N’
if @IDName='khbh'
set @IDString='N'+@IDStringend
GO
麻烦吧
还得建表autoid
调用
public String executeProc(String IDName)
{
String returnstr,sqlstr,rsstr;
rs=null;
sqlstr = "{call PROC_AUTOID(?,?)}";
try
{
if (conn!=null)
{
conn.close();
}
conn = DriverManager.getConnection(sConnStr,UseName,PassWord);
CallableStatement stmt = conn.prepareCall(sqlstr);
stmt.setString(1,IDName);
stmt.registerOutParameter(2,Types.CHAR);
rs=stmt.executeQuery();
rs.next();
rsstr = rs.getString(1);
returnstr = stmt.getString(2);
rs.close();
stmt.close();
conn.close();
}
catch (Exception erproc)
{
return null;
}
return returnstr;
}
不明白楼主为什么不用sequence,那简单很多啊
(table_name in varchar2, newmaxid out number)
as
begin
update Table_MaxID set MaxID = MaxID + 1 where TableName=table_name;
select maxid into newmaxid from Table_MaxID where TableName=table_name;
end;比如里面有一条记录,
insert into table_maxid (tablename,maxid) values ('table1',0);
应怎么调用呢?
execute testproc('table1'...);
上面这行,有三个点的地方应怎么写呢?请教!!