PLSQL学习范例--record操作

--执行insert时,可以定义一个record,将record插入到相应的表中

SQL> select * from test;

未选定行

SQL> declare
  2    test_rec test%rowtype;
  3  begin
  4    test_rec.id :=2;
  5    insert into test values test_rec;
  6   end;
  7   /

PL/SQL 过程已成功完成。

SQL> select * from test;

        ID Q     WEIGHT
---------- - ----------
         2

--同样,可以在update时,指定一个record,如下:

SQL> declare
  2     test_rec test%rowtype;
  3  begin
  4     test_rec.QUALITY :='H';
  5     test_rec.weight :=100;
  6     UPDATE test SET ROW=test_rec WHERE id=2;
  7  end;
  8  /

PL/SQL 过程已成功完成。

SQL> select * from test;

        ID Q     WEIGHT
---------- - ----------
           H        100

--delete时将删除的数据存放到一个table类型中,然后insert到另外一个表中:
SQL> create table t as select * from test where 1=2;

表已创建。

SQL> select * from t;

未选定行

SQL> declare
  2   type test_rec is table of  test%rowtype;
  3   test_tab test_rec;
  4  begin
  5    delete from test where id=1 RETURNING id,QUALITY,weight
  6    bulk collect into test_tab;
  7    if test_tab.last is not null then
  8       forall i in 1 .. test_tab.last
  9  --  dbms_output.put_line(i);
 10       insert into t values test_tab(i);
 11    end if;
 12  end;
 13  /

PL/SQL 过程已成功完成。

SQL> select * from t;

        ID Q     WEIGHT
---------- - ----------
         1 A        100

--将select出来的数据放到table类型的变量中

SQL> declare
  2    type t_rec1 is table of t%rowtype;
  3    t_tab1 t_rec1;
  4    cursor c1 is select id,weight from t where id<3;
  5    type t_rec2 is table of c1%rowtype;
  6    t_tab2  t_rec2;
  7  begin
  8  --将表t中的数据放到t_tab1中
  9    select * bulk collect into t_tab1 from t;
 10    DBMS_OUTPUT.PUT_LINE('t_tab1中的记录数:'||t_tab1.count);
 11  --输出t_tab1中的记录
 12    FOR i in t_tab1.FIRST .. t_tab1.LAST
 13      loop
 14       dbms_output.put_line('ID: '||t_tab1(i).id||',QUALITY: '||t_tab1(i).QUALITY||',WEIGHT: '||t_tab1(i).weight);
 15     end loop;
 16  --将表t中的部分数据放到t_tab2中
 17    select id,weight bulk collect into t_tab2 from t;
 18    DBMS_OUTPUT.PUT_LINE('t_tab2中的记录数:'||t_tab2.count);
 19    for i in t_tab2.first .. t_tab2.last
 20      loop
 21        dbms_output.put_line('ID: '||t_tab2(i).id||',WEIGHT: '||t_tab2(i).weight);
 22      end loop;
 23  end ;
 24  /
t_tab1中的记录数:10
ID: 1,QUALITY: A,WEIGHT: 100
ID: 2,QUALITY: A,WEIGHT: 2
ID: 3,QUALITY: A,WEIGHT: 3
ID: 4,QUALITY: A,WEIGHT: 4
ID: 5,QUALITY: A,WEIGHT: 5
ID: 6,QUALITY: A,WEIGHT: 6
ID: 7,QUALITY: A,WEIGHT: 7
ID: 8,QUALITY: A,WEIGHT: 8
ID: 9,QUALITY: A,WEIGHT: 9
ID: 10,QUALITY: A,WEIGHT: 10
t_tab2中的记录数:10
ID: 1,WEIGHT: 100
ID: 2,WEIGHT: 2
ID: 3,WEIGHT: 3
ID: 4,WEIGHT: 4
ID: 5,WEIGHT: 5
ID: 6,WEIGHT: 6
ID: 7,WEIGHT: 7
ID: 8,WEIGHT: 8
ID: 9,WEIGHT: 9
ID: 10,WEIGHT: 10

PL/SQL 过程已成功完成。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10972173/viewspace-708492/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10972173/viewspace-708492/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值