X++学习(五)

X++中的SQL成分介绍


1.Tables数据类型

在MorphX中所有用AOT创建的表,都可以当做类的定义.要操作(增,删,改,查)表中的记录,至少要声明一个表变量.表变量和对象有如下不同之处:

    a.不能为表变量分配空间.              -----隐式分配

    b.不能从其他表变量中继承.

    c.表变量中的字段是public的                ------可以在任何地方引用.

    d.表变量中的字段可以被表达式引用.

   common之于tables就如object之于Objects,所以可以用common引用所有的表中的数据.

   表变量的定义:

void MyMethod()

{

// Declares and allocates space for one CustTable record

CustTable custtable;

}

引用表表量中的字段

void PrintAccountNo();

{

CustTable CustTable;

Print CustTable.AccountNo;

}

2.Select语句

a.While Select

While Select(按照一定规则)在一些记录中遍历并可以在每条记录上执行一定的语句,因此While Select可以执行数据操作.当用while select执行数据操作的时候,应该在一个transaction中操作以确保数据完整性.

举例如下:

static void deleteTransFromVoucher(JournalNum _journalNum,

Voucher _voucher)

{

  LedgerJournalTrans ledgerJournalTrans;

  LedgerJournalTable ledgerJournalTable = LedgerJournalTable::find(_journalNum);

  Counter counter;

  ttsBegin;

  while select forUpdate ledgerJournalTrans

  index hint NumVoucherIdx

  where ledgerJournalTrans.journalNum == _journalNum &&

  ledgerJournalTrans.voucher == _voucher

  {

  ledgerJournalTrans.doDelete();

  counter++;

  }

  if (counter && ledgerJournalTable.journalType != LedgerJournalType::Periodic)

  NumberSeq::release(ledgerJournalTable.voucherSeries, _voucher);

  ttsCommit;

 

}

void printTel()

{

CustTable Cust;

while select Cust order by NameRef

where AccountNo > 2000?&&

AccountNo <=3000?>

{

print Cust.NameRef, Cust.TelephoneNo;

}

}

删除一组记录:delete_from

用while select可以用如下方式表述:

{

record r;

while select r

where ...

{

r.delete();

}

}

但是用delete_from可以减少交互次数,提高效率

{

record r;

delete_from r where ....;

}

3.X++和SQL在处理聚集函数时的不同

当一个查询的where条件不匹配任何行的时候,标准的SQL保证总有一行返回,count返回zero,其他的聚集函数列返回null.

由于Axapta不支持null值的概念,所有有一些略微的不同之处:

当聚集函数返回null的时候,就没有行返回给用户.

如果只用了count这个聚集函数,那么将会返回zero.

如果没有用聚集函数,但是某一列返回了null,将会抛出信息为不支持null的异常.

尽管Axapta不支持DBMS意义上的null,但是有其他类型的数据包含一个特定的值在一定的环境下可以当做null值使用.

4.X++和SQL在处理Group by时的不同.

X++不允许group by和order by出现在同一select语句中,这意味这显示的排序是不允许的.但是会按照group by中的元素列表自动隐式排序.

转载于:https://www.cnblogs.com/Farseer1215/archive/2006/02/15/330839.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值