企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 前言 在TC 中, Persistent Class 和 Table 是对应的关系。 定义一个Persistent的Class , updatedb 的时候就会产生对应的table. 在TC 的开发环境中, 使用一个username . 对应的会在这个username 下产生一个table 在正式环境中, 因为使用到 adm, su ,可key 三个username, 所以在这三个username 下都会生成相应的table. 具体数据保存在哪一张table 中, 就看Class 的定义是继承自哪(如果继承自admin的话, 自然就保存在admin 对应的username下) 之后使用QueryDbObject 对Class 进行查询。 查询的时候可以设置一个Scope 的参数 SC_SCOPE_OF_SESSION                         -- 在当前user 对应的table 中查询(基本上是su) SC_SCOPE_WHERE_NECESSARY        -- 在所有user 对应的table 中查询 除了QueryDbobject 的方式外, TC 还提供了 QueryDbView 的方式Query View 中的数据。 这个View 不需要对应到一个Persistent 的Class, 而是一个View 就可以了。 那么, 这种开发如何进行呢? 要注意什么状况呢? ### Query View 1. 首先, 定义 db view ~~~ CREATE OR REPLACE FORCE VIEW "VTEST" AS SELECT ATT AS ATT, '-' AS CreationDate , '-' AS CurDbName , '-' AS LastUpdate , '-' AS OBID , NULL AS Recycled , NULL AS SEIndexLanguageList , NULL AS ZBlob , 'VTEST' AS Class FROM View SQL; ~~~ 这里的ATT代笔需要定义的一个attribute 这里注意的是, 处理定义需要的attribute 外, 还需要定义一些系统使用的attribute 2. 其次, 定义动态的class ~~~ define dynamic class VTEST with parent PdmRoot; { attach ATT; } ~~~ 3. 定义好之后, View 里面有数据了。就可以使用QueryDbView的方式进行数据查找了。 在正式环境中, 1. 如果创建View 的SQL 在三个db 中都有执行的话, 使用  SC_SCOPE_WHERE_NECESSARY 这个scope 进行query , 数据就会重复(三笔) 2.如果创建View 的SQL 只在su db 中有执行的话,使用  SC_SCOPE_WHERE_NECESSARY 这个scope 进行query, 就会报找不到table 的错误。 所以好的方式是 ,在su db 中创建view , 使用 SC_SCOPE_OF_SESSION 进行query ### ###