- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2014-10-14 16:31 编辑
BetonArmEE 发表于 2014-10-13 16:45 ![]()
回复 47# yulihua49
1.开发人员长期不接触SQL,需要直接查数据库时连一些基本SQL都不会了。
2.那套语法只支持单表查询,只能生成简单的sql对应的调用oci函数,对付核算系统足够了,但是管理系统和数据抽取分析需要写复杂SQL就不行了,最后不得手工调用oci函数来做,搞的很累。
第一个问题,没办法。电脑就是培养懒蛋+笨蛋的工具。我自己已经被培养的懒得不行,笨得不行了。
第二个问题,SDBC可以写复杂语句,多表,虚表都可以。where ,order by,group by,with..as..,分析函数,hint。。。。。都需要你写,我支持。- 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(ret<=0) ShowLog(1,"descDAO:DAU_select err=%d,%s",
- DP->SQL_Connect->Errno,DP->SQL_Connect->ErrMsg);
- return ret;
- }
复制代码 以上是SDBC内部分析表结构用到的DAO。 |
|