oracle虚表能加筛选条件吗,万能报表开发说明 - 虚拟表支持条件查询

1、增加表x3_database_sql_where。这个表保存虚拟表支持哪些字段可以作为查询条件

2、虚拟表内部使用表的别名,要跟正常表对应的别名一致。这样在设置同一个查询条件的情况下,才能注入到内层虚拟表里面,提高查询速度。

例如:public void saveTableSQL(){

dictionaryService.deleteTable("sql_retail");

TableDictionarySqlRequest req=new TableDictionarySqlRequest();

req.setTableAlias("sql_retail");

req.setTableName("sql_retail");

req.setTableNameCn("零售单虚拟表");

req.setTableNameEn("sqlRetail");

List sqls=new ArrayList();

req.setSqls(sqls);

//查询

TableDictionarySqlCodeRequest selectSQl=new TableDictionarySqlCodeRequest();

selectSQl.setTableSqlId("sql_retail.selectSQl");

selectSQl.setTableAlias("sql_retail");

selectSQl.setSqlCodeType(SQLCodeType.SelectSQL);

selectSQl.setSqlCode("dretailnum.bills_id,dretailnum.style_id,s.style_name,dretailnum.acc_sums ");

sqls.add(selectSQl);

//from

TableDictionarySqlCodeRequest fromSQL=new TableDictionarySqlCodeRequest();

fromSQL.setTableSqlId("sql_retail.fromSQL");

fromSQL.setTableAlias("sql_retail");

fromSQL.setSqlCodeType(SQLCodeType.FromSQL);

fromSQL.setSqlCode("d_retail_num dretailnum left join a_goods_style s on dretailnum.style_id=s.style_id ");

sqls.add(fromSQL);

//where

TableDictionarySqlCodeRequest whereSQl=new TableDictionarySqlCodeRequest();

whereSQl.setTableSqlId("sql_retail.fromSQL");

whereSQl.setTableAlias("sql_retail");

whereSQl.setSqlCodeType(SQLCodeType.FieldWhereSQL);

whereSQl.setSqlCode("dretailnum.acc_nums>5");

sqls.add(whereSQl);

TableDictionarySqlWhereRequest whereCol1=new TableDictionarySqlWhereRequest();

whereCol1.setColumnId("style.brand_id");

whereCol1.setDataType(SQLDataType.Text);

whereCol1.setShowIndex(1);

whereCol1.setTableAlias("style");

whereCol1.setWhereOperation(SearchType.in);

whereCol1.setWhereRequired(true);

req.getWhereCols().add(whereCol1);

TableDictionarySqlWhereRequest whereCol=new TableDictionarySqlWhereRequest();

whereCol.setColumnId("dretailnum.create_date");

whereCol.setDataType(SQLDataType.Date);

whereCol.setShowIndex(0);

whereCol.setTableAlias("dretailnum");

whereCol.setWhereOperation(SearchType.between);

whereCol.setWhereRequired(true);

req.getWhereCols().add(whereCol);

ResponseMsg data1 = dictionaryService.createTableBySql(req);

System.err.println("getdepot:"+JSON.toJSONString(data1, true));

}这里使用到的表别名dretailnum就跟正常定义的d_retail_num表别名一致。

oracle 建立表脚本

CREATE TABLE "X6_BILLS_TEST"."X3_DATABASE_SQL_WHERE"

("TABLE_SQL_WHERE_ID" VARCHAR2(128 CHAR) NOT NULL ENABLE,

"CREATE_DATE" TIMESTAMP (6),

"CREATE_USER" VARCHAR2(32 CHAR),

"CREATE_USERNAME" VARCHAR2(32 CHAR),

"COLUMN_ID" VARCHAR2(64 CHAR),

"DATA_TYPE" VARCHAR2(32 CHAR),

"SHOW_INDEX" NUMBER(10,0),

"TABLE_ALIAS" VARCHAR2(64 CHAR),

"VERSION" NUMBER(19,0),

"WHERE_OPERATION" NUMBER(10,0),

"WHERE_REQUIRED" NUMBER(1,0),

PRIMARY KEY ("TABLE_SQL_WHERE_ID")

USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS

STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1

BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

TABLESPACE "X6_BILLS_TEST" ENABLE

) SEGMENT CREATION IMMEDIATE

PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255

NOCOMPRESS LOGGING

STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1

BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

TABLESPACE "X6_BILLS_TEST" ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值