欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis中sql的各种写法,项目中的。存储过程写法,创建索引写法

程序员文章站 2022-06-03 23:53:17
...

关键是扩大自己的视野,因为有的我真的不知道可以这样写?
比如:
一:if test --可以去掉多余的and

<if test = "defaultQuery and sum == false"> AND (sysdate - T.CREATED) &lt; 90 </if>
<if test = "limit30 and sum == false"> AND (sysdate - T.CREATED) &lt; 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; 	
相关标签: 存储过程