%rowtype的几个注意点

 一、%rowtype只是指明引用的记录的类型,但不保证NOT NULL约束

我们知道使用%type和%rowtype可以分别指定引用的字段、记录类型,但其中有一个特别需要注意的地方:

%type和%rowtype都不保证NOT NULL约束。例如:

DECLARE
  my_empno emp.empno%TYPE;  --emp.empno should not be null
  ...
BEGIN
  my_empno := NULL;  - - this works well

以上这段代码在emp表的empno字段不能为空的情况下依然是可以执行的。


二、%rowtype记录的赋值

用%ROWTYPE作声明的时候是不可以进行初始化赋值的,但是有两种方法可以一次性为所有字段赋值。

方法一:假如两个记录类型的声明引用了同一数据表或游标,那么它们就可以相互赋值,如:

DECLARE
  dept_rec1 dept
% ROWTYPE;
  dept_rec2 dept
% ROWTYPE;
  
CURSOR  c1  IS     SELECT   *   FROM  dept;
  dept_rec3 c1
% ROWTYPE;

BEGIN
  .. . 
  dept_rec1 :
=  dept_rec2  --this works well

但是,如果一个类型是引用的是数据表而另一个引用的是游标的话,那么,即使它们表现的内容相同,也是不能相互赋值的

dept_rec2 := dept_rec3; - - not allowed

因为此处的dept_rec2引用是表,而dept_rec3引用的是游标,所以即便它们查询的内容一样也

方法二:我们可以使用SELECT或FETCH语句将取得的数据赋给记录。但在表或视图中定义的字段名称顺序要与记录中的名称顺序相同。

DECLARE
  dept_rec dept
% ROWTYPE;
  ...
BEGIN
  
SELECT   *   INTO  dept_rec  FROM  dept  WHERE  deptno  =   30 ;
  ...
END

但是,我们不能使用赋值语句来把字段列表中的值赋给记录。所以,下面的语法形式是不允许的:

record_name := (value1, value2, value3, ...); -- not allowed 


 三、
使用别名

从游标中取出的数据,如果游标定义中含有表达式时,我们就需要使用别名才能正确地为%ROWTYPE类型记录赋值:

DECLARE
  
CURSOR  my_cursor  IS
    
SELECT  sal  + NVL(comm, 0 wages, ename  FROM  emp;
  my_rec my_cursor
% ROWTYPE;
BEGIN
  
OPEN  my_cursor;
  LOOP
    
FETCH  my_cursor
      
INTO  my_rec;
    
EXIT   WHEN  my_cursor % NOTFOUND;
    
IF  my_rec.wages  >   2000   THEN
      
INSERT   INTO   temp   VALUES  ( NULL , my_rec.wages, my_rec.ename);
    
END   IF ;
  
END  LOOP;
  
CLOSE  my_cursor;
END ;

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
控件使用 1、鼠标经过行的时候改变该行的样式,鼠标离开行的时候恢复该行的样式 使用方法(设置属性): MouseOverCssClass - 鼠标经过行时行的 CSS 类名 2、对多个字段进行复合排序;升序、降序的排序状态提示 使用方法(设置SmartSorting复合属性): AllowSortTip - 是否启用排序提示 AllowMultiSorting - 是否启用复合排序 SortAscImageUrl - 升序提示图片的URL(不设置则使用默认图片) SortDescImageUrl - 降序提示图片的URL(不设置则使用默认图片) SortAscText - 升序提示文本 SortDescText - 降序提示文本 3、根据按钮的CommandName设置其客户端属性 使用方法(设置ClientButtons集合属性): BoundCommandName - 需要绑定的CommandName AttributeKey - 属性的名称 AttributeValue - 属性的值(两个占位符:{0} - CommandArgument;{1} - Text) Position - 属性的值的位置 4、联动复选框(复选框的全选和取消全选)。选中指定的父复选框,则设置指定的所有子复选框为选中状态;取消选中指定的父复选框,则设置指定的所有子复选框为取消选中状态。如果指定的所有子复选框为均选中状态,则设置指定的父复选框为选中状态;如果指定的所有子复选框至少有一个为取消选中状态,则设置指定的父复选框为取消选中状态 使用方法(设置CascadeCheckboxes集合属性): ParentCheckboxID - 模板列中 父复选框ID ChildCheckboxID - 模板列中 子复选框ID CashBox.Helper.WebGrid中的静态方法 List GetCheckedDataKey(GridView gv, int columnIndex) List GetCheckedDataKey(GridView gv, string checkboxId) 5、固定指定行、指定列,根据RowType固定行,根据RowState固定行 使用方法(设置FixRowColumn复合属性): FixRowType - 需要固定的行的RowType(用逗号“,”分隔) FixRowState - 需要固定的行的RowState(用逗号“,”分隔) FixRows - 需要固定的行的索引(用逗号“,”分隔) FixColumns - 需要固定的列的索引(用逗号“,”分隔) TableWidth - 表格的宽度 TableHeight - 表格的高度 6、响应行的单击事件和双击事件,并在服务端处理 使用方法(设置属性): BoundRowClickCommandName - 行的单击事件需要绑定的CommandName BoundRowDoubleClickCommandName - 行的双击事件需要绑定的CommandName 7、行的指定复选框选中的时候改变该行的样式,行的指定复选框取消选中的时候恢复该行的样式 使用方法(设置CheckedRowCssClass复合属性): CheckBoxID - 模板列中 数据行的复选框ID CssClass - 选中的行的 CSS 类名 8、导出数据源的数据为Excel、Word或Text(应保证数据源的类型为DataTable或DataSet) 使用方法: 为WebGrid添加的方法 Export(string fileName) Export(string fileName, ExportFormat exportFormat) Export(string fileName, ExportFormat exportFormat, Encoding encoding) Export(string fileName, int[] columnIndexList, ExportFormat exportFormat, Encoding encoding) Export(string fileName, int[] columnIndexList, string[] headers, ExportFormat exportFormat, Encoding encoding) Export(string fileName, string[] columnNameList, ExportFormat exportFormat, Encoding encoding) Export(string fileName, strin

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值