create or replace trigger ins_staff_trigger after insert on Staff
referencing new as nrow
for each row
declare uname varchar(30);
        ucount number;
sql_str varchar2(100);
begin
        uname:='user_'||:nrow.personid;
        select count(*) into ucount from dba_users where username=uname;
        if ucount>=1 then
sql_str := 'create user uname identified by '||:nrow.password;
execute immediate sql_str;
              dbms_output.put_line('user altered');
        else
              dbms_output.put_line('no user');
        end if;
end;
/

解决方案 »

  1.   

    不好意思,原来也有编译错误,
    :nrow.personid为number型的.
    是不是'user_'||:nrow.personid要出错的.有什么数子转字符串的函数吗?
      

  2.   

    不会的,俺调试过的,如果你一定要转换,就用下面的函数
    to_char()
      

  3.   

    啊,我晕啊,
    select count(*) into ucount from dba_users where username=uname;出错了
    奇怪啊
      

  4.   

    虽然还未完全解决,但主要的难题已有了答案,感谢ATGC