`
keke_wanwei
  • 浏览: 124339 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

PL/SLQ Record

阅读更多

记录相当于JAVA中的DTO,它代表的是一种类型,一种数据结构.它不是数组或列表.所以我们把一个查询结果赋给一个记录时,
查询结果应该只有一条,而不是多条.

自定义记录如下:

sql 代码
  1. DECLARE  
  2.    TYPE record_sale IS RECORD (   
  3.       area_code   VARCHAR2 (10) NOT NULL DEFAULT 'NO_AREA',   
  4.       YEAR        INTEGER       NOT NULL := 1701,   
  5.       MONTH       INTEGER       NOT NULL := 1,   
  6.       SDATE       INTEGER       NOT NULL := 1,   
  7.       SALEROOM    NUMBER        NOT NULL := 0,   
  8.       SALER       VARCHAR2 (10) NOT NULL := 'who?'   
  9.    );   
  10.    var_sale   record_sale;   
  11.    i          NUMBER      := 1;   
  12. BEGIN  
  13.    var_sale.area_code := 'WUHAN';   
  14.    var_sale.YEAR := 1324;   
  15.    var_sale.MONTH := 10;   
  16.    var_sale.sdate := 3;   
  17.    var_sale.saleroom := 435.23;   
  18.    var_sale.saler := 'wanwei';   
  19.    LOOP   
  20.       var_sale.YEAR := var_sale.YEAR + 1;   
  21.       var_sale.MONTH := var_sale.MONTH + 1;   
  22.       var_sale.sdate := var_sale.MONTH + 1;   
  23.       var_sale.saleroom := var_sale.saleroom + 100;   
  24.       INSERT INTO T_SALE_TEST VALUES var_sale;   
  25.       i := i + 1;   
  26.       EXIT WHEN i = 10;   
  27.    END LOOP;   
  28.    COMMIT;   
  29. END;   
  30. /  

要注意的是,NOT NULL 字段要赋初值.

另外LOOP还有两种写法:

 

sql 代码
  1. for idx in 1..10 loop   
  2.      var_sale.YEAR := var_sale.YEAR + 1;   
  3.      var_sale.MONTH := var_sale.MONTH + 1;   
  4.      var_sale.sdate := var_sale.MONTH + 1;   
  5.      var_sale.saleroom := var_sale.saleroom + 100;   
  6.      INSERT INTO T_SALE_TEST VALUES var_sale;   
  7.   END LOOP;  
sql 代码
  1. WHILE (i < 10) LOOP   
  2.    var_sale.YEAR := var_sale.YEAR + 1;   
  3.    var_sale.MONTH := var_sale.MONTH + 1;   
  4.    var_sale.sdate := var_sale.MONTH + 1;   
  5.    var_sale.saleroom := var_sale.saleroom + 100;   
  6.    INSERT INTO T_SALE_TEST VALUES var_sale;   
  7.    i := i + 1;   
  8. END LOOP;  

其中第一种和第三种变量i要在declare中定义.

想得到一张表的记录,简单的用:table_name%ROWTYPE.同样,一个游标的记录可以用:cursor_name%ROWTYPE.

还有,记录不是也不可能存在数据库中的,当我们定义一个记录类型时,并没有分配相应的内存,只在定义某个记录的变量时才开始分配内存.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics