CREATE OR REPLACE PACKAGE example IS                                                                  
  PROCEDURE show_emp(dno NUMBER);                                               
  PROCEDURE form_select;                                                        
  PROCEDURE add_dept(dno NUMBER,name VARCHAR2,loc VARCHAR2);                    
  PROCEDURE form_insert;                                                        
  PROCEDURE main;                                                               
  PROCEDURE frame_left;                                                         
  PROCEDURE frame_right;                                                        
  FUNCTION authorize RETURN BOOLEAN;                                            
END example;              
/                                                              
CREATE OR REPLACE PACKAGE BODY example IS                                                             
PROCEDURE main IS                                                               
BEGIN                                                                           
  htp.htmlopen;                                                                 
  htp.headopen;                                                                 
  htp.title('FrameӦʾ');                                                   
  htp.headclose;                                                                
  htp.framesetopen(null,'30%,*');                                               
  htp.frame('web.frame_left');                                                  
  htp.frame('web.frame_right','main_win');                                      
  htp.framesetclose;                                                            
END;                                                                            
PROCEDURE frame_left IS                                                         
BEGIN                                                                           
  htp.HtmlOpen;                                                                 
  htp.BodyOpen(cattributes=>'bgcolor=lightgreen');                              
  htp.Anchor2('web.show_emp?dno=10','HTMLʾ',                               
    null,'main_win');                                                           
  htp.br;                                                                       
  htp.Anchor2('web.form_select','Formʾ',                             
    null,'main_win');                                                           
  htp.br;                                                                       
  htp.Anchor2('web.form_insert','Formʾ',                             
    null,'main_win');                                                           
  htp.br;                                                                       
END;                                                                            
PROCEDURE frame_right IS                                                        
BEGIN                                                                           
  htp.HtmlOpen;                                                                 
  htp.BodyOpen(cattributes=>'bgcolor=lightgreen');                              
  htp.br;                                                                       
  htp.br;                                                                       
  htp.br;                                                                       
  htp.br;                                                                       
  htp.center(htf.header(1,'ӭʹFrame'));                                    
  htp.bodyclose;                                                                
  htp.htmlclose;                                                                
END;                                                                            
PROCEDURE show_emp(dno NUMBER) IS                                               
  CURSOR emp_cursor IS SELECT empno,ename,sal,job,hiredate                      
    FROM emp WHERE deptno=dno;                                                  
BEGIN                                                                           
  htp.HtmlOpen;                                                                 
  htp.HeadOpen;                                                                 
  htp.Title(''||dno);                                                       
  htp.HeadClose;                                                                
  htp.BodyOpen(cbackground=>'/img/bg.jpg');                                     
  htp.tableopen('BORDER=3',cattributes=>'VALIGN="TOP"');                        
  htp.tableheader('');                                                      
  htp.tableheader('');                                                      
  htp.tableheader('');                                                      
  htp.tableheader('λ');                                                      
  htp.tableheader('');                                                  
  FOR c IN emp_cursor LOOP                                                      
     htp.tablerowopen;                                                          
     htp.tabledata(c.empno);                                                    
     htp.tabledata(c.ename);                                                    
     htp.tabledata(c.sal);                                                      
     htp.tabledata(c.job);                                                      
     htp.tabledata(c.hiredate);                                                 
     htp.tablerowclose;                                                         
  END LOOP;                                                                     
  htp.tableclose;                                                               
  htp.BodyClose;                                                                
  htp.HtmlClose;                                                                
END;                                                                            
PROCEDURE form_select                                                           
IS                                                                              
  CURSOR dept_cursor IS SELECT deptno,dname FROM dept;                          
BEGIN                                                                           
  htp.HtmlOpen;                                                                 
  htp.HeadOpen;                                                                 
  htp.Title('Formʾ');                                                        
  htp.HeadClose;                                                                
  htp.BodyOpen(cbackground=>'/img/bg.gif');                                     
  htp.formopen('web.show_emp');                                                 
  htp.formselectopen('dno','ѡ');                                     
  FOR c IN dept_cursor LOOP                                                     
    htp.formselectoption(c.dname,                                               
      cattributes=>'VALUE="'||c.deptno||'"');                                   
  END LOOP;                                                                     
  htp.formselectclose;                                                          
  htp.formsubmit(cvalue=>'');                                               
  htp.formclose;                                                                
  htp.BodyClose;                                                                
  htp.HtmlClose;                                                                
END;                                                                            
PROCEDURE add_dept                                                              
(dno NUMBER,name VARCHAR2,loc VARCHAR2) IS                                      
BEGIN                                                                           
  INSERT INTO dept VALUES(dno,name,loc);                                        
  COMMIT;                                                                       
END;                                                                            
PROCEDURE form_insert IS                                                        
BEGIN                                                                           
  htp.HtmlOpen;                                                                 
  htp.HeadOpen;                                                                 
  htp.Title('Formʾ');                                                    
  htp.HeadClose;                                                                
  htp.BodyOpen(cbackground=>'/img/bg.jpg');                                     
  htp.formopen('web.add_dept');                                                 
  htp.tableopen('NOBORDER');                                                    
  htp.tablerowopen;                                                             
  htp.tabledata('ű');                                                    
  htp.tabledata(htf.formtext('dno','10','10',null));                            
  htp.tablerowclose;                                                            
  htp.tablerowopen;                                                             
  htp.tabledata('');                                                    
  htp.tabledata(htf.formtext('name','10','10',null));                           
  htp.tablerowclose;                                                            
  htp.tablerowopen;                                                             
  htp.tabledata('λ');                                                    
  htp.tabledata(htf.formtext('loc','10','10',null));                            
  htp.tablerowclose;                                                            
  htp.br;                                                                       
  htp.formsubmit(cvalue=>'ύ');                                               
  htp.formreset(cvalue=>'');                                                
  htp.formclose;                                                                
  htp.BodyClose;                                                                
  htp.HtmlClose;                                                                
END;                                                                            
FUNCTION authorize RETURN BOOLEAN IS                                            
BEGIN                                                                           
  owa_sec.set_protection_realm('ûͿ');                             
  IF((owa_sec.get_user_id='whl')) AND                                           
    ((owa_sec.get_password='whl')) THEN                                         
    RETURN TRUE;                                                                
  ELSE                                                                          
    RETURN FALSE;                                                               
  END IF;                                                                       
END;                                                                            
END example;                                                                        
/