Mybatis中sql的各种写法,项目中的。存储过程写法,创建索引写法
程序员文章站
2022-06-03 23:53:17
...
关键是扩大自己的视野,因为有的我真的不知道可以这样写?
比如:
一:if test --可以去掉多余的and
<if test = "defaultQuery and sum == false"> AND (sysdate - T.CREATED) < 90 </if>
<if test = "limit30 and sum == false"> AND (sysdate - T.CREATED) < 30 </if>
test里面的表达式,limit30是model中的一个布尔变量,sum是统布尔计变量,
如果limit30 传 true ,sum 传 false,就是不统计,那么 test 表达式就为 true,那么就会走后面的语句(只查询近30天的记录),否则不走。
如果前端不传limit30,布尔默认为false,那么怎么都不会走下面的。也就是
要查90天就是 传 defaultQuery = true,要查30天 就传limit30 = true.
二:一个字段代表多层意思进行搜索
<!--按照 产品描述,物料号,内部型号,外部型号 进行搜索-->
<if test = "productName != null and productName != '' ">
AND ( T1.X_NAME like '%'||#{productName}||'%'
OR T1.PART_NUM like '%'||#{productName}||'%'
OR T2.ATTRIB_01 like '%'||#{productName}||'%'
OR T2.ATTRIB_02 like '%'||#{productName}||'%'
)
</if>
三:mybatis调用存储过程写法
<select id = "quote2agreement" statementType = "CALLABLE" parameterType="java.util.Map">
<![CDATA[
{
call QUOTE_TO_AGREE_COMMIT( #{AGREE_ID,mode=IN,jdbcType=VARCHAR} )
}
]]>
</select>
QUOTE_TO_AGREE_COMMIT 这个应该是 存储过程的名字。 ()这个应该存储过程要用到的参数
statementType = “CALLABLE” 这个应该是固定写法,如果是调用存储过程的话。
四:有的话,再写。到PLSQL去看了下 文件夹 Procedures(存储过程),看了很多 绿色P圆圈,可能就是Procedures的标志吧看了上面的 QUOTE_TO_AGREE_COMMIT 这个。所以看看别人是怎么写存储过程的。
create or replace procedure QUOTE_TO_AGREE_COMMIT(AGREE_ID in varchar2) is
AGREE_ID1 varchar2(50) := null ; -----合同Id
OPPTY_ID1 varchar2(50) := null ; -----商机Id
QUOTE_ID1 varchar2(50) := null ; -----报价Id
CHANNEL_ID varchar2(50) := null ; -----招投标结果,中标渠道Id
Standard_Payment varchar2(100) := null ; -----客户标准付款方式
Payment_Days varchar2(100) := null ; -----客户账期
Black_Type varchar2(100) := null ; -----黑名单类型
PR_ADDR_ID varchar2(50) := null ; -----客户地址Id
ATTRIB_07 varchar2(50) := null ; -----付款Id
ORDER_DATES varchar2(50) := null ; -----预期天数
LoginID varchar2(50) := null ; -----用户Id
begin
AGREE_ID1 := AGREE_ID;
/* select substr( AGREE_ID,0,instr(AGREE_ID,';') -1 ) tt into AGREE_ID1 from dual;
select substr( AGREE_ID,0,instr(AGREE_ID,';') +1,length(AGREE_ID) ) tt into LoginID from dual; */
/*根据合同Id,匹配其他逻辑需要的信息*/
select T.QUOTE_ID,T.OPTY_ID,T.CREATED_BY
into QUOTE_ID1,OPTY_ID1,LoginID
from siebel.s_doc_agree T
where T.ROW_ID = AGREE_ID1;
/* \*获取当前登录人的用户Id*\
select t2.row_id into LoginID from siebel.s_user T2 where T2.LOGIN in (select t.USERNAME from user_users T);
*/
--如果合同Id 和 商机Id 都不为空的情况下,将招投标结果客户 写到合同下单渠道
IF ( AGREE_ID1 IS NOT NULL AND OPPTY_ID1 IS NOT NULL) THEN
select T.CHANNEL_ID
into CHANNEL_ID
from sieble.CX_BIDDING_RE T
where T.OPTY_ID = OPPTY_ID1
and ROWNUM <= 1;
--如果招投标结果的中标渠道不为空,获取中标渠道客户的账期信息
if ( CHANNEL_ID is not null ) then
select T2.ATTRIB_47,
T2.ATTRIB_59,
T.X_BLACK_TYPE,
T.PR_ADDR_ID,
T2.ATTRIB_07
into Standard_Payment,
Payment_Days,
Black_Type,
PR_ADDR_ID,
ATTRIB_07
from siebel.s_org_ext T,
siebel.s_org_ext_x T2
where T.ROW_ID = CHANNEL_ID
and T.ROW_ID = T2.PAR_ROW_ID(+);
/*把中标渠道客户设置到生成的合同上,并同时更新账期信息*/
update siebel.s_Doc_Agree T
set T.X_ACCOUNT_ID = CHANNEL_ID,
T.BILL_TO_ADDR_ID = PR_ADDR_ID,
T.X_CONSIGNEE_ADD_ID =PR_ADDR_ID,
T.X_CONSIGNEE_ACC_ID =CHANNEL_ID,
T.X_CUS_PAY_ID =ATTRIB_07,
T.X_BLACK_TYPE =Black_Type,
T.X_ACCNT_DAYS =Payment_Days,
T.X_ACCNT_PAY_TYPE =Standard_Payment
where T.ROW_ID = AGREE_ID1;
commit;
end if; --判定招投标结果 尾
END IF; --判定合同ID 和商机Id 都不为空
/*将报价销售团队,复制到生成的合同中*/
siebel.quote_to_agree_add_position(AGREE_ID1,QUOTE_ID1); --这应该是个写好的方法吧。
/*回写报价下产品清单的请求数量*/
siebel.UPDATE_QUOTE_ITEM_NUM(QUOTE_ID1);
/*更新商机的销售阶段*/
siebel.Change_Oppty_Stage(OPPTY_ID1);
/*报价生成合同后回写标记*/
siebel.Update_Quote_Flag(QUOTE_ID1);
/*下单客户是否转交易 置为Y,并且通过ERP视图 获取下单客户的预期款天数*/
siebel.ORDER_ACCOUNT_CHECK(QUOTE_ID1,ORDER_DATES);
/*对生成的合同进行逻辑操作*/
siebel.UPDATE_AGREE(AGREE_ID1,LoginID);
/*检查合同行的意向单价与报价行是否一致,解决小数点问题*/
--siebel.QUOTE_TO_AGREE_FIXPRICE(AGREE_ID1,QUOTE_ID1);
end QUOTE_TO_AGREE_COMMIT;
五:创建索引
偶尔看到的,语法如下:
--create table创建表
create table S_DOC_AGREE
(
row_id varchar(15) not null,
created DATE default sysdate not null,
created_by varchar(15) not null,
last_upd DATE default sysdate not null,
dcking_num number(22,7) default 0,
active_id char(1) default 'N' not null,
agr_active_id char(1) default 'Y' not null,
name varchar2(50) not null,
rev_num number(22,7) not null,
eff_date DATE,
desc_text varchar2(255)
...
)
--表空间
tablespace SIEBELDATA
pctfree 10
initrans 1
maxtrans 255
storage ( intial 1M next 8K minextends 1 maxextends unlimited);
--create / recreate indexs 创建索引
create index S_DOC_AGREE_F52
on S_DOC_AGREE(FN_ACCNT_ID)
tablespace SIEBELINDEX
pctfree 10
initrans 2
maxtrans 255
storage ( initial 1M next 1M minextends 1 maxextends unlimited );
...
--grant/revoke object privileges 赋予/撤回 对象特权。
grant select ,insert,update ,delete on S_DOC_AGREE to IF_USER with grant option; //赋予增删改查权限?、
grant select ,insert,update ,delete on S_DOC_AGREE to SSE_ROLE;
下一篇: 视图、触发器、事务、存储过程、函数