create procedure findGuestById( 
hid            in  pss_guest_data.id%type, 
hguestid       out pss_guest_data.id%type, 
hguestname     out pss_guest_data.name%type, 
hguesttypeid   out pss_guest_data.guesttypeid%type, 
hguestTypename out pss_guest_type_data.name%type, 
hcontact       out pss_guest_data.contact%type, 
hpersonalphone out pss_guest_data.personalphone%type, 
hmobilephone   out pss_guest_data.mobilephone%type, 
hemail         out pss_guest_data.email%type 

is begin 
   select a.id as guestid
        , a.name as guestname
        , a.guesttypeid as guesttypeid
        , b.name as guesttypename
        , a.contact
        , nvl(a.personalphone,'phone inval')
        , nvl(a.mobilephone,'cell inval')
        , nvl(a.email,'email inval') 
   into   hguestid
        , hguestname
        , hguesttypeid
        , hguestTypename
        , hcontact
        , hpersonalphone
        , hmobilephone
        , hemail 
   from   pss_guest_data      a
        , pss_guest_type_data b  
   where  a.guesttypeid       = b.id
   and    a.id                = hid; end findGuestById;把中文替换编译试试

解决方案 »

  1.   


    这个存储过程不不是很复杂,编译的时候无响应,是不是已经有job或者其他的地方在调用这个procedure了。你可以查询一下dba_ddl_lcoks视图,看看有没有这个procedure的信息。
      

  2.   

    注意 select into 在存储过程中如果没有数据或者数据大于一条的情况下会抛异常(no_data_found/to_many_data)你最好加个异常处理。
      

  3.   

    应该是这两个表有被锁的情况吧
    另外,如果select结果有两条会出错