一行最大column数和row piece-概念

Oracle concepts中,表中的一行最大1000 column,每255 column会分成一个row piece,下面使用实验来证明它


创建一个1000 column的行
SQL> begin
  2    execute immediate 'create table t(col1 char)';
  3     for i in 2 .. 1000 loop
  4         execute immediate 'alter table t add (col'||i||' char)';
  5    end loop;
  6  end;
  7  /

PL/SQL procedure successfully completed.

结果可以创建。再创建一个1001 column的行

SQL> drop table t;

Table dropped.

SQL> begin
  2    execute immediate 'create table t(col1 char)';
  3     for i in 2 .. 1001 loop
  4         execute immediate 'alter table t add (col'||i||' char)';
  5    end loop;
  6  end;
  7  /
begin
*
ERROR at line 1:
ORA-01792: maximum number of columns in a table or view is 1000
ORA-06512: at line 4

结果创建到1001个时报错


接下来创建一个260 column的行的表,再insert数据,dump出来看一行是不是分为两个row piece

SQL> drop table t;

Table dropped.

SQL> begin
  2    execute immediate 'create table t(col1 number)';
  3     for i in 2 .. 260 loop
  4         execute immediate 'alter table t add (col'||i||' number)';
  5    end loop;
  6  end;
  7  /

PL/SQL procedure successfully completed.

insert into t values(
1,
2,
3,
4


(省略)


253,
254,
255,
256,
257,
258,
259,
260);

SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from t;

DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------ ------------------------------------
                                  16                                  406

SQL> alter system dump datafile 16 block 406;

System altered.

查看DUMP文件

[oracle@myora10 udump]$ more myora10_ora_31787.trc
/d01/app/oracle/admin/myora10/udump/myora10_ora_31787.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /d01/app/oracle/product/10.2.0
System name:    Linux
Node name:      myora10
Release:        2.6.9-67.ELsmp
Version:        #1 SMP Fri Nov 16 12:48:03 EST 2007
Machine:        i686
Instance name: myora10
Redo thread mounted by this instance: 1
Oracle process number: 17
Unix process pid: 31787, image: oracle@myora10 (TNS V1-V3)


(省略)


block_row_dump:
tab 0, row 0, @0x1be1
tl: 927 fb: -----L-- lb: 0x1  cc: 255
col  0: [ 2]  c1 07
col  1: [ 2]  c1 08
col  2: [ 2]  c1 09
col  3: [ 2]  c1 0a
col  4: [ 2]  c1 0b
col  5: [ 2]  c1 0c


(省略)


col 253: [ 3]  c2 03 3c
col 254: [ 3]  c2 03 3d
tab 0, row 1, @0x1bc9
tl: 24 fb: --H-F--- lb: 0x1  cc: 5
nrid:  0x04000196.0
col  0: [ 2]  c1 02
col  1: [ 2]  c1 03
col  2: [ 2]  c1 04
col  3: [ 2]  c1 05
col  4: [ 2]  c1 06
end_of_block_dump
End dump data blocks tsn: 16 file#: 16 minblk 406 maxblk 406   


从上面的DUMP文件可以看出,一个row分成了两个row piece

tab 0, row 1, @0x1bc9
tl: 24 fb: --H-F--- lb: 0x1  cc: 5
nrid:  0x04000196.0

看上面的fb,标示为H和F,H代表Head piece of row ,F代表First data piece
nrid:  0x04000196.0        下一个row piece的地址

tab 0, row 0, @0x1be1
tl: 927 fb: -----L-- lb: 0x1  cc: 255
看上面的fb,标示为L,L代表Last data piece

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

转载于:http://blog.itpub.net/8745319/viewspace-573079/

function chooseCommodity(rowData: any) { if (commodityInfo?.value) { // 清空 commodityInfo.value 的所有属性 Object.keys(commodityInfo.value).forEach((key) => { if (['_X_ROW_KEY'].includes(key)) return; _.set(commodityInfo.value, key, ''); }); } let row = _.cloneDeep(rowData); delete row._X_ID; delete row._X_ROW_KEY; const columnData = { ...row, commodity_id: row.id, // 药品id commodity_no: row.commodity_no, // 商品编号 commodity_name: row.commodity_name, // 商品名称 commodity_size: row.size, // 规格 customer_name: row.manufacturer_name, // 生产厂家 commodity_dosage: row.drug_dosage, // 剂型 commodity_unit: row.unit, // 单位 package_piece: row.package_piece, // 件包装 commodity_num: 0, // 药品量 qualified_num: 0, //合格量 reject_num: 0, //拒收量 commodity_price: Utils.fixedNumAccuracy((+row.last_purch_price || 0) * 1) || 0, // 药品单价 commodity_sum: 0, // 药品金额 income_tax_rates: row.income_tax_rates ? Utils.fixedNumAccuracy(row.income_tax_rates * 100, 0) : 0, // 税率 tax_price: Utils.fixedNumAccuracy( (row.last_purch_price || 0) / (1 + (row.income_tax_rates ? row.income_tax_rates : 0)) ), // 去税单价 tax_sum: 0, // 去税金额 tax_amount: 0, // 税额 remark: '', // 备注 num_of_stock: row.sale_balance, // 可销库存 repertoryList: [], // 仓库列表 districtList: [], // 货位列表 receipt_repertory_id: row.receipt_repertory_id || '', // 仓库id receipt_repertory_name: row.receipt_repertory_name || '', // 仓库name receipt_goodseat_id receipt_goodseat_name receipt_goodseat_id: row.receipt_goodseat_id || '', // 货位id receipt_goodseat_name: row.receipt_goodseat_name || '', // 货位name batch_no: row.batch_no || '', // 批号 manufacture_date: row.manufacture_date || '', // 生产日期 expiry_date: '', // 有效期至 check_no: row.check_no || '', // 检验报告号 sale_price_ago: row.sale_price, //调整前销售单价 price_a_ago: row.price_a, //调整前价格一 price_b_ago: row.price_b, //调整前价格二 vip_price_ago: row.vip_price, //调整前会员价 split_price_a_ago: row.split_price_a, //调整前价格一 split_price_b_ago: row.split_price_b, //调整前价格二 split_vip_price_ago: row.split_vip_price, //调整前会员价 check_surface: '合格', // 外观质量状况 check_conclusion: '合格', // 验收结论 expiry_dates: row.expiry_date || '', //效期 prescribed_drug: row.prescribed_drug, }; commodityInfo.value = _.assign(commodityInfo.value, columnData); triggerColumn.value = enterFindcolumn[0]; tableClick(columnData.id || ''); setTimeout(() => { ctrlTopTable(); }, 500); if (!row.receipt_repertory_id) { getItemRepertoryListFn(commodityInfo.value!, true); } // getListRepertoryByCommodityAndCondition<LIST_REPERTORY_TYPE>({ // code: columnData.storage_condition || 7, // commodity_id: columnData.commodity_id, // }).then((res) => { // if (res.code == 1) { // receipt_repertory_list.value = res.data; // if (res.data[0]) { // if (_.find(res.data, { id: columnData.receipt_repertory_id })) { // columnData.receipt_repertory_id = res.data[0].id; // columnData.receipt_repertory_name = res.data[0].repertory_name; // columnData.receipt_goodseat_id = res.data[0].goodseat_id; // columnData.receipt_goodseat_name = res.data[0].goodseat_name; // } else { // columnData.receipt_repertory_id = ''; // columnData.receipt_repertory_name = ''; // columnData.receipt_goodseat_id = ''; // columnData.receipt_goodseat_name = ''; // } // } // } // }); }
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值