oracle存储过程实现订单处理,按要求设计数据表,写出一个存储过程,查询与该客户成交的所有订单和每个订单总价...

create or replace procedure order_Pro(c out number) is

--变量

v_cid varchar2(32);

--游标

cursor cur_book is select bookid,max(ord) o,sum(num) s from t_temp_chapter group by bookid;

begin

--第一步:将统计数据加入到图书表

--循环游标

for book_item in cur_book loop

--查询出一本书最后的章节编号

select cid into v_cid from t_temp_chapter where bookid=book_item.bookid and ord=book_item.o;

--将最后的章节编号和总字数保存在图书表中

update t_book set allnum=allnum+book_item.s,lastCid=v_cid where bookid=book_item.bookid;

end loop;

--第二步:将临时章节表中的数据,导入到正式章节表中,并且加入两个字段

insert into t_chapter(cid,bookid,num,cname,ord,free,createTime)

(select cid,bookid,num,cname,ord,

(select free from t_book where bookid=t.bookid),Sysdate from t_temp_chapter t);

commit;

--第三步:统计返回的数据

select count(1) into c from t_temp_chapter;

--第四步:删除临时章节表中的数据

delete from t_temp_chapter;

commit;

end book_Pro;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解答这个问题。不过在回答之前,我需要先说明一下:ChitGPT并不是一个真正的AI,它只是一个自然语言处理模型,能够按照预设的规则和模式生成回答。因此,我不能保证ChitGPT的回答完全准确无误,也不能保证所提供的代码能够直接运行。建议你在使用这些代码时,先进行适当的调试和修改。 那么,关于你的问题,我给出的回答如下: 首先,我们可以创建一个名为dept2的部门表,可以使用以下的SQL语句: ``` CREATE TABLE dept2 ( deptno NUMBER(2) PRIMARY KEY, dname VARCHAR2(14), loc VARCHAR2(13) ); INSERT INTO dept2 VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO dept2 VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO dept2 VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO dept2 VALUES (40, 'OPERATIONS', 'BOSTON'); INSERT INTO dept2 VALUES (50, 'MARKETING', 'LOS ANGELES'); INSERT INTO dept2 VALUES (60, 'FINANCE', 'SAN FRANCISCO'); INSERT INTO dept2 VALUES (70, 'HUMAN RESOURCES', 'SEATTLE'); INSERT INTO dept2 VALUES (80, 'IT', 'DENVER'); INSERT INTO dept2 VALUES (90, 'ADMINISTRATION', 'PHOENIX'); INSERT INTO dept2 VALUES (100, 'ENGINEERING', 'AUSTIN'); INSERT INTO dept2 VALUES (110, 'RETAIL', 'MIAMI'); INSERT INTO dept2 VALUES (120, 'LOGISTICS', 'ATLANTA'); INSERT INTO dept2 VALUES (130, 'MANUFACTURING', 'DETROIT'); INSERT INTO dept2 VALUES (140, 'PUBLIC RELATIONS', 'WASHINGTON'); INSERT INTO dept2 VALUES (150, 'CUSTOMER SERVICE', 'BIRMINGHAM'); ``` 接下来,我们可以编一个存储过程,用于实现部门表的分页查询。以下是一个示例存储过程: ``` CREATE OR REPLACE PROCEDURE get_dept_page( p_page_num IN NUMBER, p_page_size IN NUMBER) IS v_offset NUMBER; BEGIN v_offset := (p_page_num - 1) * p_page_size; FOR r_dept IN (SELECT * FROM dept2 ORDER BY deptno OFFSET v_offset ROWS FETCH NEXT p_page_size ROWS ONLY) LOOP DBMS_OUTPUT.PUT_LINE(r_dept.deptno || ' ' || r_dept.dname || ' ' || r_dept.loc); END LOOP; END; ``` 这个存储过程接受两个参数:p_page_num用于指定页码,p_page_size用于指定每页的记录数。它会根据这两个参数计算出要查询的数据的偏移量,并使用OFFSET和FETCH NEXT语句实现分页查询。最后,使用DBMS_OUTPUT.PUT_LINE输出查询结果。 最后,我们可以使用Java编一个Servlet,在JSP页面上调用这个存储过程实现分页查询。以下是一个示例代码: ```java import java.io.IOException; import java.io.PrintWriter; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class DeptServlet */ public class DeptServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:xe"; private static final String DB_USER = "your_username"; private static final String DB_PASSWORD = "your_password"; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); int pageNum = Integer.parseInt(request.getParameter("pageNum")); int pageSize = Integer.parseInt(request.getParameter("pageSize")); try { Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); CallableStatement stmt = conn.prepareCall("{call get_dept_page(?, ?)}"); stmt.setInt(1, pageNum); stmt.setInt(2, pageSize); stmt.execute(); out.println("<html><body>"); while (stmt.getMoreResults()) { out.println("<table>"); out.println("<tr><th>DeptNo</th><th>DName</th><th>Loc</th></tr>"); while (stmt.getResultSet().next()) { out.println("<tr>"); out.println("<td>" + stmt.getResultSet().getInt("deptno") + "</td>"); out.println("<td>" + stmt.getResultSet().getString("dname") + "</td>"); out.println("<td>" + stmt.getResultSet().getString("loc") + "</td>"); out.println("</tr>"); } out.println("</table>"); } out.println("</body></html>"); stmt.close(); conn.close(); } catch (SQLException e) { out.println("<html><body>"); out.println("<p>Error: " + e.getMessage() + "</p>"); out.println("</body></html>"); e.printStackTrace(out); } } } ``` 这个Servlet接受两个参数:pageNum用于指定页码,pageSize用于指定每页的记录数。它会在doGet方法调用存储过程get_dept_page,并将查询结果输出到JSP页面上。需要注意的是,由于默认情况下Oracle JDBC驱动不会自动提交DBMS_OUTPUT的内容,因此在这个示例代码,我们没有使用DBMS_OUTPUT.GET_LINES等方法来读取存储过程的输出,而是将它们打印到了控制台上。如果你需要在JSP页面上显示存储过程的输出,可以将存储过程的输出一个临时表,并在Java代码查询这个临时表的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值