ORACLE 脚本
-- 空值 SELECT * FROM EMP T WHERE T.COMM IS NULL; SELECT * FROM EMP T WHERE T.COMM IS NOT NULL; ?-- 查询不是业务员,且基本工资大于两千的数据 SELECT * FROM EMP T WHERE T.JOB != ‘CLERK‘ AND SAL > 2000; -- 这个简单 SELECT * FROM EMP T WHERE NOT (T.JOB = ‘CLERK‘ OR SAL <= 2000); -- 这个之前掉过坑,not 在between and 之前也是可以的,我记得 ?-- 字符串处理 SELECT * FROM EMP T WHERE T.ENAME LIKE ‘_M%‘; -- 查询第2个字母是M的全部雇员的信息(‘_‘ 匹配单个任意字符,常用来限制表达式的字符长度) SELECT UPPER(‘aaa‘),LOWER(‘BBB‘) FROM DUAL; -- 字符串大小写转换 SELECT INITCAP(‘abc‘) FROM DUAL; -- 句首转大写,输出 Abc SELECT REPLACE(‘ABCD‘,‘A‘,‘a‘) FROM DUAL; -- 替换,输出 aBCD SELECT LENGTH(‘aaaaa‘) FROM DUAL; -- 求字符串长度 SELECT SUBSTR(‘abcd‘,1,2) FROM DUAL; -- 输出 ab,其中 select substr(‘abcd‘,1,2) FROM dual; 效果是一样的,oracle很灵活,从0到1开始都可以 SELECT T.ENAME,SUBSTR(T.ENAME,LENGTH(T.ENAME) - 2) FROM EMP T; -- 截取后3个字母 SELECT LTRIM(‘ aa ‘),RTRIM(‘ aa ‘),TRIM(‘ aa ‘) FROM DUAL; -- 去掉左边,右边,左右两边空格 SELECT LPAD(‘aaa‘,5,‘*‘),RPAD(‘aaa‘,‘*‘) FROM DUAL; -- 填充函数,分别输出:**aaa aaa** SELECT INSTR(‘aaaaa‘,‘a‘) FROM DUAL; -- 字符串查找函数,可以查抄得到返回1(表示是),查找不到返回0(表示否) SELECT ‘编号是‘ || T.EMPNO || ‘哈哈‘ FROM EMP T; -- 字符连接 SELECT CONCAT(‘ddd‘,T.EMPNO) FROM EMP T; -- 字符连接 ?-- 数值处理 SELECT ROUND(111.44486,3) FROM DUAL; -- 输出111.445;对小数进行四舍五入,可以指定保留位数;如果不指定,则是对小数点之后的数字全部全部四舍五入 SELECT TRUNC(111.44486,3) FROM DUAL; -- 输出111.444;截取字符串 SELECT ROUND(789.625,-2) FROM DUAL; -- 对比,明显trunc 也可以 SELECT ROUND(789.675,2) FROM DUAL; -- 对比,明显trunc 也可以 SELECT MOD(10,4) FROM DUAL; -- 输出:2;取模 ?-- 日期处理 SELECT SYSDATE + 3,SYSDATE - 3 FROM DUAL; -- 当前时间加上一天,减去一天 SELECT SYSDATE - T.HIREDATE FROM EMP T; -- 计算出以天数为单位的数值 SELECT SYSDATE,ADD_MONTHS(SYSDATE,3),-3) FROM DUAL; -- 三个月之前,之后的日期(注意:三个月之后以及90天之后的概念是不一致的) SELECT SYSDATE,NEXT_DAY(SYSDATE,‘星期三‘) FROM DUAL; -- 求出下一个星期三的日期 SELECT SYSDATE,LAST_DAY(SYSDATE) FROM DUAL; -- 求出当月最后一天的日期 SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP; -- 当前时间与雇佣时间相差的月数(注意,有小数点的,所以要想取整,要trunc(months_between(SYSDATE,hiredate))),所以,要求年数的话再除以12; SELECT EXTRACT(YEAR FROM SYSDATE) AS YEARS,EXTRACT(MONTH FROM SYSDATE) AS MONTHS,EXTRACT(DAY FROM SYSDATE) AS DAYS FROM DUAL; -- 提取年月日 SELECT EXTRACT(YEAR FROM SYSTIMESTAMP) AS YEARS,EXTRACT(MONTH FROM SYSTIMESTAMP) AS YEARS,EXTRACT(DAY FROM SYSTIMESTAMP) AS DAYS,EXTRACT(HOUR FROM SYSTIMESTAMP) AS HOURS,EXTRACT(MINUTE FROM SYSTIMESTAMP) AS MINUTES,EXTRACT(SECOND FROM SYSTIMESTAMP) AS SECONDS FROM DUAL; -- 提取年月日时分秒 ?-- 关于转换(主要为to_char),后来发觉to_date很有用啊,to_number在一次中帮了我大忙,哈哈 SELECT SYSDATE,TO_CHAR(SYSDATE,‘YYYY-MM-DD‘),-- 2018-09-02 TO_CHAR(SYSDATE,‘MM‘),-- 09 TO_CHAR(SYSDATE,‘DD‘),-- 02 TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS‘),-- 与下面的区别是,这是:2018-09-02 13:33:38,有0 TO_CHAR(SYSDATE,‘FMYYYY-MM-DD HH24:MI:SS‘),-- 与上面的区别是,这是:2018-9-2 13:33:38 没有0 TO_CHAR(SYSDATE,‘YEAR-MONTH-DY‘) -- 打印出:TWENTY EIGHTEEN-9月 -星期日 FROM DUAL; SELECT TO_CHAR(123.456,‘9999.9999‘) FROM DUAL; -- 输出 123.4560 SELECT TO_CHAR(123.456,‘0000.0000‘) FROM DUAL; -- 输出 0123.4560 SELECT TO_DATE(‘1970-09-08‘,‘YYYY-MM-DD‘) FROM DUAL;-- 变为date类型(使用不多) SELECT SYSDATE,‘YYYY-MM-DD‘) FROM DUAL;-- 变为date类型(使用不多) ?-- 判断(注意:数据类型必须一致,否则报错,工作当中就遇到了这个问题) SELECT NVL(val1,val2) FROM DUAL; -- 如果nvl1为null的话,则返回nvl2,否则返回nvl1; SELECT NVL2(nvl1,nvl2,nvl3) FROM DUAL; -- 如果nvl1为null的话,返回nvl3,否则返回nvl2; SELECT NULLIF(nvl1,nvl2) FROM DUAL; -- nvl1和nvl2是否相等,如果相等则返回null,否则返回nvl1(注:如果val1为null,则报错) SELECT DECODE(val,val1,reslult1,val2,result2,...,default) FROM DUAL; -- 如果val等于val1,则返回result1;如果val等于val2,则返回result2.。。。。,否则返回default; -- oracle 也可以case when SELECT COALESCE(val1,val3,valn) FROM DUAL; -- 如果val1为null,则返回val2,如果val2为null,则返回val3,如果valn还是null,则返回null; -- 连接 SELECT1 UNION ALL SELECT2; -- 返回全部结果,包括重复 SELECT1 UNION SELECT2; -- 返回全部结果,去掉重复 SELECT1 MINUS SELECT2; -- 求出交集后,返回SELECT1去掉交集的数据 SELECT1 Intersect SELECT2; -- 返回交集 ?-- 统计函数 count,sum,avg,max,min,median,variance,stddev. SELECT COUNT(*) FROM emp; -- 求出所有列,返回17 SELECT COUNT(comm) FROM emp; -- emp表上的空值不被统计在内 SELECT COUNT(DISTINCT deptno) FROM emp; -- 消除重复值 ?备注: UPDATE pmp_agnt_mark_info mi SET mi.mark_status = ‘发布‘ WHERE EXISTS (SELECT 1 FROM test_mark t WHERE mi.mark_code = t.mark_code AND mi.mark_batch = t.mark_batch AND t.mark_status = ‘发布‘); SELECT t.county_name,LISTAGG(t.street_name,‘,‘) WITHIN GROUP (ORDER BY t.cover_id) FROM pmp_agnt_cover_info t WHERE t.city_name = ‘深圳市‘ GROUP BY t.county_name; SELECT * FROM pmp_agnt_sign_info s WHERE REGEXP_LIKE(s.mark_code,‘797Y00‘); SELECT to_char(wm_concat(name099)) FROM test099; -- a,b,c,d,e SELECT id,to_char(wm_concat(name099)) FROM test099 GROUP BY ID; -- 1 a,b 2 d,e CREATE TABLE myemp AS SELECT * FROM emp; -- 这个东西经常用,记住记住 CREATE TABLE myemp AS SELECT * FROM emp where 1 = 2; -- 复制表结构,不要数据 SELECT * FROM tab; -- 查看全部表,视图 UPDATE myemp SET (sal,comm) = (SELECT sal,comm FROM myemp WHERE empno = ‘7890‘) WHERE empno = ‘7369‘; -- 关于更新的超级大发现,就像以前的新增 merge into 注意这个,新增或者更改的时候特别有用 -- 层级结构,树形结构处理?? START WITH ...... CONNECT BY ...... INSERT INTO DEMO (ID,DSC,PID) VALUES (‘00001‘,‘中国‘,‘-1‘); INSERT INTO DEMO (ID,PID) VALUES (‘00011‘,‘陕西‘,‘00001‘); INSERT INTO DEMO (ID,PID) VALUES (‘00012‘,‘贵州‘,PID) VALUES (‘00013‘,‘河南‘,PID) VALUES (‘00014‘,‘广东‘,PID) VALUES (‘00111‘,‘西安‘,‘00011‘); INSERT INTO DEMO (ID,PID) VALUES (‘00112‘,‘咸阳‘,PID) VALUES (‘00113‘,‘延安‘,PID) VALUES (‘00211‘,‘贵阳‘,‘00012‘); INSERT INTO DEMO (ID,PID) VALUES (‘00311‘,‘洛阳‘,‘00013‘); INSERT INTO DEMO (ID,PID) VALUES (‘00312‘,‘郑州‘,PID) VALUES (‘00411‘,‘肇庆‘,‘00014‘); -- 从上到下,留意 ID = PID; SELECT * FROM DEMO START WITH ID = ‘00001‘ CONNECT BY PRIOR ID = PID; -- 从下到上,留意 PID = ID; SELECT * FROM DEMO START WITH ID = ‘00112‘ CONNECT BY PRIOR PID = ID; -- 可以用in SELECT * FROM DEMO START WITH ID IN (‘00011‘,‘00012‘,‘00013‘) CONNECT BY PRIOR ID = PID; -- 条件筛选,WHERE一定要是 START WITH 前面 SELECT * FROM DEMO WHERE ID != ‘00311‘ START WITH ID IN (‘00011‘,‘00013‘) CONNECT BY PRIOR ID = PID; ? -- 返回多行的子查询(咔堡oracle与mysql都可以的啊叼,一开始以为mysql不可以) -- 查看与 SCOTT 同一 工作 而且同一 工资的 人 SELECT * FROM emp t WHERE (job,sal) = (SELECT t1.job,t1.sal FROM emp t1 WHERE t1.ename = ‘SCOTT‘) AND t.ename != ‘SCOTT‘; -- 查看 oracle 版本 SELECT * FROM v$version; -- 查看所有表信息 SELECT * FROM All_Tab_Comments t WHERE t.OWNER = ‘PMP‘; ? -- 关于关键词ANY SELECT MIN(sal) FROM emp WHERE job = ‘MANAGER‘ GROUP BY deptno; -- 输出 2850,2975,2450 -- 效果与IN一样 SELECT * FROM emp t WHERE t.sal = ANY (SELECT MIN(sal) FROM emp WHERE job = ‘MANAGER‘ GROUP BY deptno); -- 查询所有高于以及等于子查询的最大值(这里具体是指2975)的所有数据 SELECT * FROM emp t WHERE t.sal > ANY (SELECT MIN(sal) FROM emp WHERE job = ‘MANAGER‘ GROUP BY deptno); -- 查询所有低于以及等于子查询的最小值(这里具体是指2450)的所有数据 SELECT * FROM emp t WHERE t.sal < ANY (SELECT MIN(sal) FROM emp WHERE job = ‘MANAGER‘ GROUP BY deptno); ?-- EXIT SELECT * FROM emp -- 不返回任何数据嘛 WHERE EXISTS (SELECT * FROM emp WHERE empno = 99999); -- EXISTS 返回false,所以不会有任何数据返回 (类似于SELECT * FROM emp WHERE 1 = 2;1 = 2 也是返回false嘛) SELECT * FROM emp -- 返回所有数据嘛 WHERE EXISTS (SELECT * FROM emp); -- EXISTS 返回true,所以不会有任何数据返回 (类似于SELECT * FROM emp WHERE 1 = 1;1 = 1 也是返回true嘛) SELECT * FROM emp -- 返回所有数据嘛 WHERE EXISTS (SELECT * FROM emp WHERE empno = 7369); -- 一样是返回所有数据,因为子查询也是返回true嘛,不要被条件所迷惑 SELECT * FROM emp -- 类似地,加个not,返回所有数据 WHERE NOT EXISTS (SELECT * FROM emp WHERE empno = 99999); ?-- 定义临时表 WITH e AS (SELECT * FROM emp WHERE empno IN (7369,7499)) -- WITH e AS (sql语句),定义临时表 SELECT * FROM e WHERE e.empno = 7499; -- 对临时表进行使用哦,哈哈,好似oracle真的好叼 ?-- 一点点分区 SELECT t.deptno,t.ename,t.sal,SUM(t.sal)OVER(PARTITION BY t.deptno) AS cnt FROM emp t; -- 按照部门进行分区,over 操作分区后的数据(这里操作的是每个分区的工资总和) SELECT t.deptno,MAX(t.sal)OVER(PARTITION BY t.deptno) AS cnt FROM emp t; -- 按照部门进行分区,over 操作分区后的数据(这里操作的是每个分区的最大工资) SELECT t.deptno,MAX(t.sal)OVER() AS cnt FROM emp t; -- 没有进行分区,总共就只有一个分区,所以求的就是总的最大值 SELECT t.deptno,SUM(t.sal)OVER(PARTITION BY t.deptno,t.job) AS cnt FROM emp t;-- 对多个字段进行分区 SELECT t.deptno,SUM(t.sal)OVER(PARTITION BY t.deptno ORDER BY t.sal DESC) AS cnt FROM emp t; -- 在分区内对工资进行降序(当然,也可有多个字段),求和递增,请测试 SELECT t.deptno,SUM(t.sal)OVER(ORDER BY t.sal DESC) AS cnt FROM emp t; -- 所有数字求和递增 -- 事务 SET AUTOCOMMIT = OFF; -- 取消自动提交处理,开启事务处理 SET AUTOCOMMIT = ON; -- 打开自动提交处理,关闭事务处理 COMMIT; -- 提交事务 ROLLBACK TO -- 回滚操作 SAVEPOINT; -- 设置事务保存点 SQL> insert into myemp (empno,ename) values (1111,‘aaaa‘); SQL> update myemp set ename = ‘bbbb‘ where empno = ‘1111‘; SQL> savepoint sp_a; SQL> update myemp set ename = ‘cccc‘ where empno = ‘1111‘; SQL> savepoint sp_b; SQL> update myemp set ename = ‘dddd‘ where empno = ‘1111‘; SQL> savepoint sp_c; SQL> select empno,ename from myemp where empno = ‘1111‘; EMPNO ENAME ---------- -------------------- 1111 dddd 已选择1行。 SQL> rollback to sp_b; SQL> select empno,ename from myemp; -- 可以看到值与回滚点的关系,哈哈 EMPNO ENAME ---------- -------------------- 1111 cccc 已选择1行。 SQL> -- 代码块 <select id="reject" parameterType="java.util.Map" resultType="java.lang.Long"> BEGIN UPDATE TSE_SAPFI_SUPPLIER SET STATUS = #{status,jdbcType=VARCHAR},MAIN_STATUS=#{mainStatus,jdbcType=VARCHAR} where user_id=#{userId} and MAIN_STATUS != ‘05‘ UPDATE SUPP_AUTHENTICATE SET AUTH_BY = #{authBy,review_result=#{reviewResult,jdbcType=VARCHAR} where guid=#{auguid}; END; </select> <select id="review" parameterType="java.util.Map" resultType="java.lang.Long"> DECLARE v_num number; BEGIN UPDATE TSE_SAPFI_SUPPLIER SET STATUS = #{status,jdbcType=VARCHAR} WHERE user_id=#{userId} and MAIN_STATUS != ‘06‘; UPDATE SUPP_AUTHENTICATE SET AUTH_BY = #{authBy,jdbcType=VARCHAR} WHERE guid=#{auguid}; SELECT count(1) INTO v_num FROM pmp_agnt_auto_authenticate pa WHERE pa.auth_id = #{auguid}; IF v_num > 0 THEN UPDATE tse_sapfi_supplier ts SET ts.main_status=‘06‘ WHERE user_id=#{userId}; UPDATE supp_authenticate sa SET sa.main_status=‘06‘ WHERE guid=#{auguid}; END IF; END; </select> begin FOR i IN 1..100000 LOOP insert into PMP_111_TEST (card_no) values (sys_guid()); commit; end loop; end; begin FOR i IN 1..1000 LOOP insert into PMP_111_TEST(id,Card_No,Card_No_Enc) select i id,bb.card_no,‘‘ Card_No_Enc from PMP_AGNT_TEMP_DEAL_PASSWORD bb; commit; end loop; end; ? ? --?可以这样写,很神奇 <select id="getAgntCfgByAgr" parameterType="com.sf.pmp.tse.model.agreementNew.AgreementNew" resultType="java.util.Map"> <if test="bussinessType==‘JT‘"> select examine_indexs,calcu_formulas from pmp_agnt_examine_cfg ec where ec.area_code = #{bussinessArea} and ec.item_type=‘2‘ and #{agrStartDate} between ec.begin_date and ec.end_date </if> <if test="bussinessType==‘ZZFW‘"> select examine_indexs||‘收件计提比例‘||calcu_formulas||‘收件固定计提‘||WEIGHTS||‘派件计提比例‘||CHECK_NO||‘派件固定计提‘||EXT2||‘计算规则‘||EXT1 AS examine_indexs from pmp_agnt_examine_cfg ec where ec.area_code = #{bussinessArea} and ec.item_type=‘3‘ and #{agrStartDate} between ec.begin_date and ec.end_date </if> </select> ?分页: -- 取前面5条数据的最简单的方法(这个一定要记住) SELECT * FROM pmp_agnt_won_mark_result WHERE ROWNUM <= 5; -- 取前面5条数据(通用方法) SELECT t.*,ROWNUM rn FROM (SELECT * FROM pmp_agnt_won_mark_result)t WHERE ROWNUM <= 5; -- 这里的 ROWNUM 是指 from 那里的 ROWNUM -- 取第3到第5条数据(通用方法) SELECT * FROM ( SELECT t.*,ROWNUM rn FROM (SELECT * FROM pmp_agnt_won_mark_result)t -- 1)首先要将查询的数据 from(sql)一下 WHERE ROWNUM <= 5 -- 2)前面5条 ) t2 WHERE rn >= 3; -- 取from的rownum 3)再取3到5条 SELECT t2.* FROM ( SELECT t.*,ROWNUM rn FROM pmp_agnt_won_mark_result t -- 看到了没有,rownum 又是取from后面的了 )t2 WHERE rn BETWEEN 3 AND 5; SELECT * FROM ( SELECT t.*,ROWNUM rn FROM pmp_agnt_won_mark_result t WHERE ROWNUM <= 5 ) t2 WHERE t2.rn >= 3; -- 又是from 后面的 -- 醍醐灌顶 SELECT t.*,Rownum FROM pmp_agnt_won_mark_result t WHERE rownum >= 3 AND ROWNUM <= 5; -- 当生成结果集时,Oracle首先会产生一条ROWNUM为1的记录,显然不符合条件,那么同样会继续产生第二条数据,同样标识ROWNUM为1, -- 该条记录同样继续被过滤掉,后续生成的ROWNUM依然为1,因此上述查询语句不会有任何查询结果, -- 所以如果想要使上述结果有满足条件的结果集,必须使用子查询,代码如下: SELECT * FROM (SELECT ROWNUM rn,t.* FROM pmp_agnt_won_mark_result t)t2 WHERE rn >= 3 AND rn <= 5; ? 闪回技术: ??SELECT * FROM tab; ?SELECT object_name,original_name,operation,type FROM RECYCLEBIN; -- 删除表 DROP TABLE myemp; ? SELECT * FROM tab; -- 多了一行 ?SELECT object_name,type FROM RECYCLEBIN; -- 这个也是 这就是传说中的闪回技术: ?FLASHBACK TABLE myemp TO BEFORE DROP; ? 备注:彻底删除,加个:merge,就什么都没有了:DROP TABLE myemp merge; -------------------------------------------------------------------------------------锁------------------------------------------------------------------------------------------------------ select empno,ename from myemp where deptno = 10 for update; -- 行级锁定,类似于INSERT,UPDATE,DELETE等DML语句 SESSION 1: SQL> select empno,ename from myemp where deptno = 10 for update; -- 对相关数据实现了行级锁定 SESSION 2; SQL> select empno,ename from myemp where deptno = 10 for update; -- 处于一直等待状态 SESSION 3; SQL> select empno,ename from myemp where deptno = 10 for update nowait; -- 一发觉有其它锁锁定该数据,立刻抛出异常(nowait就是不要等待的意思嘛) select empno,ename from myemp where deptno = 10 for update nowait * 第 1 行出现错误: ORA-00054: 资源正忙,但指定以 NOWAIT 方式获取资源 SESSION 4; SQL> select empno,ename from myemp where deptno = 10 for update wait 3; -- 等待了3秒之后,抛出异常提示 select empno,ename from myemp where deptno = 10 for update wait 3 * 第 1 行出现错误: ORA-30006: 资源已被占用; 执行操作时出现 WAIT 超时 排他锁(Exclusive,简称X锁):一旦用户对某个资源添加了X锁,则其他用户都不能再对该资源添加任何类型的锁,直到该用户释放了资源上的X锁为止。 共享锁(Share,简称S锁):一旦用户对某个资源添加了S锁,则其他用户都不能在该资源上添加X锁,只能添加S说句,直到该用户释放了资源上的S锁为止。 ?其它数据库对象 -- 视图 CREATE VIEW v_myview AS sql; SELECT * FROM v_myview; DROP VIEW v_myview; SELECT * FROM user_views; -- 查看所有已创建的视图 -- 序列 CREATE SEQUENCE myseq; -- 最简单的 SELECT * FROM user_sequences; -- 查看所有的已创建的序列 SELECT myseq.nextval FROM dual; -- 求下一个序列 SELECT myseq.currval FROM dual; -- 求当前序列,注意:如果是刚刚创建序列的时候,立即执行这个语句会报错的 DROP SEQUENCE myseq; -- ROWID:orcale 默认为每条记录分配一个唯一的地址编码 -- ROWNUM:目前所知是分页用 -- oracle 自动帮助用户创建,用户只需要使用即可 -- oracle 伪列 NEXTVAL,CURRVAL,SYSDATE,SYSTIMESTAMP,ROWNUM,ROWID -- 伪表 dual -- 索引 SELECT * FROM USER_INDEXES t WHERE t.TABLE_NAME = ‘PMP_AGNT_WON_MARK_RESULT‘; -- 查看所有表或者某一张具体表的索引,名称,类型等 SELECT t.index_name,t.table_name,t.column_name,t.column_position,t.column_length,t.char_length,t.descend FROM USER_IND_COLUMNS t WHERE t.INDEX_NAME = ‘WON_ID‘; ?存储过程项目实战 数据库脚本:注意if? end if 这种格式 create or replace package body pmp_agnt_public_pkg as PROCEDURE fix_contract (p_agreement_no VARCHAR2,-- 入参 p_error OUT VARCHAR2) AS -- 出参 v_agreement_id number; -- 声明变量 ....... BEGIN; SELECT COUNT(*) INTO v_cnt03 FROM TSE_AGREEMENT_INFO_NEW t WHERE t.bussiness_type = ‘422‘ AND t.agreemen_no = p_agreement_no; IF v_cnt03 = 0 THEN p_error := ‘你所输的不是区域代理合同编号,请确认后再输‘; -- 返回值 RETURN; END IF; ?xml文件:注意jdbcType=VARCHAR,被狠狠坑了一嗲 <update id="fixContract" statementType="CALLABLE"> {call pmp_agnt_public_pkg.fix_contract(#{p_agreement_no,mode=IN,#{p_error,mode=OUT,jdbcType=VARCHAR})} </update> ? ?怎么调用xml:入参用map封装,出参用map.get(""); public String fixContract(String agreementNo) { Map<String,String> map = new HashMap<String,String>(); map.put("p_agreement_no",agreementNo); ----- dao.update("fixContract",map); return map.get("p_error"); ----- } ? END! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |