2013-10-14 3 views
0

Я пытаюсь сделать процедуру, которая будет принимать идентификатор сотрудника как входной файл и получить всю строку с 7 столбцами. Тем не менее, я создал процедуру, но когда я ее запустил, она выдает сообщение об ошибке «недопустимый идентификатор». скажите, пожалуйста, что я делаю неправильно?Как создать процедуру в oracle 10g, чтобы получить целую строку

create or replace procedure getdetails (empid number) 
    is 
    stmt varchar2 (1000); 
    begin 
    stmt :='select * from myadmin where employe_id=empid'; 
    execute immediate stmt; 
    end; 
    /

выполнение, используя ниже заявления

begin getdetails (5); 
end; 


    package pack.java; 
    import pack.java.allrequestmodel; 
    import java.io.*; 
    import java.lang.*; 
    import java.sql.*; 
    import javax.servlet.*; 
    import javax.servlet.http.*; 
    import javax.servlet.jsp.*; 
    import javax.servlet.jsp.tagext.*; 

     public class allrequestcontrol extends TagSupport 
     { 
     HttpServletRequest request; 
     HttpServletResponse response; 
     String ss=""; 
     String emp=""; 
     public int doStartTag() throws JspException 
     { 
      request=(HttpServletRequest)pageContext.getRequest(); 
      response=(HttpServletResponse)pageContext.getResponse(); 
     return EVAL_PAGE; 
     } 

     public ResultSet check() 
     {   
     HttpSession mysession=request.getSession(); 
     ss=(String)mysession.getAttribute("user"); 
     mysession.setAttribute("user",ss); 
     JspWriter out=pageContext.getOut(); 
     Connection con; 
     CallableStatement stmt; 
     ResultSet rs=null; 
      try 
     { 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     } 
     catch(ClassNotFoundException ex) 
     { 
     } 
      try 
     { 

con= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","gaurav","oracle"); 
     stmt=con.prepareCall("call getdetails(?)"); 
     stmt.setString(1,ss); 
     rs=stmt.executeQuery(); 
     } 
     catch(SQLException ex) 
     { 
     } 

     return rs; 
     } 

     public int doEndTag() throws JspException 
     { 

     JspWriter out=pageContext.getOut(); 
     ResultSet rs= check(); 
     try 
     { 
     out.println("<table border=2>"); 
     out.println("<tr>"); 
     out.println("<th>EmployeId</th>"); 
     out.println("<th>Supervisor</th>"); 
     out.println("<th>Department</th>"); 
     out.println("<th>PickDate.</th>"); 
     out.println("<th>PickTime</th>"); 
     out.println("<th>DropDate</th>"); 
     out.println("<th>DropTime</th>"); 
     out.println("<th>Status</th>"); 
     out.println("<th></th>"); 
     out.println("</tr>"); 
     while(rs.next()) 
    { 
    out.println("<tr>"); 
    out.println("<td>"+rs.getString(1)+"</td>"); 
    out.println("<td>"+rs.getString(2)+"</td>"); 
    out.println("<td>"+rs.getString(3)+"</td>"); 
    out.println("<td>"+rs.getString(4)+"</td>"); 
    out.println("<td>"+rs.getString(5)+"</td>"); 
    out.println("<td>"+rs.getString(6)+"</td>"); 
    out.println("<td>"+rs.getString(7)+"</td>"); 
    out.println("<td>"+rs.getString(8)+"</td>"); 
    out.println("<td><input type=radio name=radio value="+rs.getString(8)+"></td>"); 
    out.println("</tr>"); 
    } 
    emp=(String)request.getParameter("radio"); 
    HttpSession mysession=request.getSession(); 
    mysession.setAttribute("deleteemp",emp); 
    } 
    catch(Exception ex) 
    { 
    } 

    return super.doEndTag(); 
    } 
} 
+2

Почему вы используете динамический SQL? –

+2

Вам нужно выбрать 'in' что-то. –

+0

На самом деле я новичок в PL/SQL, поэтому сам изучаю. Я запутался в том, следует ли использовать функцию или процедуру для извлечения целой строки? , а так как я предложил мне что-то выбрать, я не знаю, как это сделать, потому что я пытался использовать «dual», он не позволяет – Gaurav

ответ

0

PL/SQL позволяет использовать SQL непосредственно, вам не нужен динамический SQL (выполнение немедленного) в этом случае.

Кроме того, вы можете выбрать целую строку в переменную ROWTYPE, которая будет типом записи, который будет иметь ту же структуру, что и строка в таблице. Например:

procedure getdetails (empid number) 
is 
    my_rec myadmin%ROWTYPE; 
begin 
    select * 
    INTO my_rec 
    from myadmin 
    where employe_id=empid; 
    -- now you can refer to my_rec.employe_id, etc. 
end; 
+0

Спасибо. Кроме того, я вызываю эту процедуру через JDBC (обновил код выше), чтобы отобразить строку, связанную с определенным (empid), но код ничего не отображает. скажите, пожалуйста, что я делаю неправильно? – Gaurav

+0

вам нужно что-то сделать с возвращенной записью - например. используйте параметры OUT для возврата результатов в вызывающий процесс. –

Смежные вопросы