oracle使用游标进行循环数据插入

建表语句:

begin
execute immediate ' drop table Customer';
exception when others then
null;
end;
 

begin
execute immediate ' drop table OrderHistory';
exception when others then
null;
end;
  

  -- Create Customer Table
CREATE TABLE Customers
(   
    Customer_Id NUMBER(16) NOT NULL,
    Name VARCHAR(25),
    CONSTRAINT cus_id_pk PRIMARY KEY(Customer_Id )
)



-- Create Order Table
CREATE TABLE Orders
(   
    Order_Id  NUMBER(16) NOT NULL,
    Name VARCHAR(25),
    Customer_Id NUMBER(16) NOT NULL,
    CONSTRAINT ord_id_pk PRIMARY KEY(Order_Id ),
    CONSTRAINT cus_id_fk FOREIGN KEY (Customer_Id) REFERENCES Customers(Customer_Id)
)

 

 

-- Create Order History Table

begin
execute immediate ' drop table OrderHistory';
exception when others then
null;
end;

CREATE TABLE OrderHistory
(
    OrderHistory_Id NUMBER(16),
    CustomerName VARCHAR(25),
    OrderName VARCHAR(25),
    CONSTRAINT OrderHistory_Id_pk PRIMARY KEY(OrderHistory_Id )
)

插入数据的存储过程:

CREATE   PROCEDURE  spAddOrderHistory
(
    
@CustomerName   VARCHAR ( 25 ),
    
@OrderName   VARCHAR ( 25 )
)
AS
BEGIN
    
INSERT   INTO  OrderHistory(CustomerName,OrderName)
    
VALUES ( @CustomerName @OrderName )
END

使用游标进行数据插入:

--  use cursor to insert data into order history table
DECLARE   @customer_name   VARCHAR ( 25 )
DECLARE   @order_name   VARCHAR ( 25 )

DECLARE  curOrder  CURSOR  READ_ONLY
FOR
SELECT  c.Name  as   [ Customer Name ] , o.Name  as   [ Order Name ]
FROM  Customers c  INNER   JOIN  Orders o
    
ON  c.CustomerId  =  o.Customer_Id
ORDER   BY   [ Customer Name ] [ Order Name ]

OPEN  curOrder

FETCH   NEXT   FROM  curOrder
INTO   @customer_name @order_name

WHILE   @@FETCH_STATUS   =   0     
BEGIN
    
EXEC  spAddOrderHistory  @customer_name @order_name  
           
    
FETCH   NEXT   FROM  curOrder  INTO   @customer_name @order_name
END

CLOSE  curOrder
DEALLOCATE  curOrder

运行结果:

C2 O2 by C2
C1 O3 by C1
C2 O4 by C2
C1 O1 by C1
C1 O5 by C1
C2 O6 by C2

 

转载于:https://www.cnblogs.com/Automation_software/archive/2011/04/04/2003332.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值