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中操作以确保数据完整性.
举例如下:

ExpandedBlockStart.gif View Code
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 
  {
    print Cust.NameRef, Cust.TelephoneNo;
  }
}

 

 删除一组记录:delete_from

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

void  delete()
{
    record r;
    
while  select r
    
where  ...
    {
      r.delete();
    }
}

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

void  delete()
{
   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/Kurodo/archive/2011/07/13/2105512.html

无人驾驶算法学习是指通过学习和应用算法来实现无人驾驶车辆的自主导航和决策能力。其,NDT算法是一种常用的定位算法,它通过匹配激光雷达数据和地图数据来估计车辆的位置。相比于ICP算法,NDT算法不需要匹配各个点计算速度较快,因此在定位模块常常使用NDT算法。此外,为了进一步加速NDT算法的优化过程,可以使用CUDA实现的fast_pcl package进行并行加速。\[2\] 在C++,可以使用PCL(Point Cloud Library)来实现无人驾驶算法的学习。PCL是一个开源的点云处理库,提供了丰富的点云处理算法和工具。官方提供了文教程,可以参考其的代码来学习和实践无人驾驶算法。\[2\] 关于牛村的问题,村长的家位于坐标(0,0),牛可乐家的位置是(a,b)。村长使用了一台无牛驾驶工程车,它可以接收一个移动K步的指令,并且每一步只会选择上下左右的一个方向移动一个单元。如果工程车移动了x步后停在了牛可乐家门口,牛可乐输入了指令M。要判断工程车是否有可能回到村长家,需要判断指令M是否满足一定的条件。具体的条件需要根据题目给出的输入描述来确定。\[3\] 综上所述,无人驾驶算法学习可以通过使用NDT算法和PCL库来实现,而关于牛村的问题需要根据题目给出的输入描述来判断工程车是否有可能回到村长家。 #### 引用[.reference_title] - *1* *3* [无人驾驶(C++版)](https://blog.csdn.net/weixin_45753030/article/details/117310401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [无人驾驶算法学习):激光里程计之帧间匹配算法](https://blog.csdn.net/orange_littlegirl/article/details/89262501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值