--创建自动增长列
create sequence emp_sequence
increment by 1----每次增加几个
minvalue 1----最小值为1
nomaxvalue----不限制最大值
start with 1----从1开始
cache 10----缓存
order;
--问题类型表
create table questionType(
 qid int primary key,
 typename varchar2(200) not null)
procedure InsertUser(uname in varchar2,upass in varchar2,zname in varchar2 ,sex in varchar2,company in  varchar2,dept in varchar2,job in varchar2,telephone in varchar2,Email in varchar2,MSN in varchar2,QQ in varchar2,resultvalue out  testCursorType) 
 is
 sqlstr varchar2(200);
 
begin 
sqlstr:='insert into usersyan values(';
 sqlstr:=sqlstr||emp_sequence.nextval||','||uname||','||upass||','||zname||','||sex||','||company||','||dept||','||job||','||telephone||','||Email||','||MSN||','||QQ||')';
execute immediate sqlstr;
commit;
end;我创建了一个自动增长列,想用存储过程来添加数据,但是把自动增长列作为参数添加编译不通过,这是怎么回事呢?
如果我直接用sql语句则会成功

解决方案 »

  1.   

    emp_sequence.nextval不能这样用。
    create or replace procedure InsertUser(uname in varchar2,upass in varchar2,zname in varchar2,
      sex in varchar2,company in varchar2,dept in varchar2,
      job in varchar2,telephone in varchar2,Email in varchar2,
      MSN in varchar2,QQ in varchar2,resultvalue out testCursorType)
    is
      sqlstr varchar2(200);
      qid number;
    begin
    select emp_sequence.nextval
      into qid
      from dual;

    sqlstr:='insert into usersyan values(';
    sqlstr:=sqlstr||to_char(qid)||','||uname||','||upass||','||zname||','||sex||','||company||','||dept||','||job||','||telephone||','||Email||','||MSN||','||QQ||')';
    execute immediate sqlstr;
    commit;
    end;