zoukankan      html  css  js  c++  java
  • 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中的元素列表自动隐式排序.

  • 相关阅读:
    安装lnmp 时如何修改数据库数据存储地址及默认访问地址
    ubuntu 设置root用户密码并实现root用户登录
    解决ubuntu 远程连接问题
    linux 搭建FTP服务器
    PHP 根据ip获取对应的实际地址
    如何发布自己的composer包
    使用composer安装composer包报Your requirements could not be resolved to an installable set of packages
    laravel 框架配置404等异常页面
    使用Xshell登录linux服务器报WARNING! The remote SSH server rejected X11 forwarding request
    IoTSharp 已支持国产松果时序数据库PinusDB
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/330839.html
Copyright © 2011-2022 走看看