|
本帖最后由 yulihua49 于 2025-9-16 20:25 编辑
能支持表连接,聚合吗?
支持。多表模板需要手工制作,也有半自动的工具,就是手工写meta,建立模板和结构体。
以下就是从表结构生成模板的程序片段,就使用了多表模板:
/* Formatted on 2011/09/29 */
static T_PkgType TAB_COLUMNS_tpl[]={ //生成模板用的模板
{CH_CHAR,49,"c.TABLE_NAME Fld_Tlb_Name",0,-1},
{CH_CHAR,49,"c.COLUMN_NAME Fld_Column_Name"},
{CH_CHAR,31,"c.DATA_TYPE Fld_Column_Type"},
{CH_SHORT,sizeof(short),"DATA_LENGTH Fld_Column_Len"},
{CH_SHORT,sizeof(short),"DATA_PRECISION"},
{CH_SHORT,sizeof(short),"c.DATA_SCALE Data_Scale"},
{CH_SHORT,sizeof(short),"k.POSITION Fld_PK"},
{-1,0,"ALL_TAB_COLUMNS c, " //表名表达式
"(SELECT C2.TABLE_NAME,C2.COLUMN_NAME,C2.POSITION "
"FROM USER_CONSTRAINTS C1,USER_CONS_COLUMNS C2 "
"WHERE C1.OWNER = :Fld_Column_Name AND " //可以使用绑定变量
"C1.TABLE_NAME=:Fld_Tlb_Name AND C1.CONSTRAINT_TYPE='P' AND "
"C2.CONSTRAINT_NAME=C1.CONSTRAINT_NAME) k ",0}
};
/* auto make pattern */
static int descDAO(DAU *DP,char *stmt)
{
int ret;
// 如果是其它数据库,要改。
strcpy(stmt,"WHERE c.TABLE_NAME = k.TABLE_NAME(+) "
"AND c.COLUMN_NAME = k.COLUMN_NAME(+) "
"AND c.OWNER = :Fld_Column_Name AND c.TABLE_NAME=:Fld_Tlb_Name "
"ORDER BY c.TABLE_NAME, c.COLUMN_ID ");
// DP->srm.hint="/*+client_result_cache*/";
ret=DAU_select(DP,stmt,0);
。。。。。。。
if(!srmp->tabname || !*srmp->tabname) return -1;
DAU_init(&patt_DAU,SQL_Connect,0, &tab_col,TAB_COLUMNS_tpl);
n=descDAO(&patt_DAU,stmt);
。。。。。。
|
|