JAVA代码:
@SuppressWarnings("unchecked") public String validateSets(final String setIds) { Object object = getHibernateTemplate().execute(new HibernateCallback(){ @SuppressWarnings("deprecation") public Object doInHibernate(Session session) throws HibernateException, SQLException { CallableStatement statement = session.connection().prepareCall("{call PKG_VALID_SET_INTERSECT.VALIDATE_SETIDS(?,?)}"); statement.setString(1, setIds); statement.registerOutParameter(2, Types.VARCHAR); statement.execute(); return statement.getString(2); } }); return object == null ? null :object.toString(); }
?
?
packages:
CREATE OR REPLACE PACKAGE BODY PKG_VALID_SET_INTERSECT IS --字符串分割函数 FUNCTION SPLIT_STR(P_STR IN VARCHAR2, P_DELIMITER IN VARCHAR2 DEFAULT (',')) RETURN tbl_split_type IS J INT := 0; I INT := 1; LEN INT := 0; LEN1 INT := 0; STR VARCHAR2(4000); MY_SPLIT tbl_split_type := tbl_split_type(); BEGIN LEN := LENGTH(P_STR); LEN1 := LENGTH(P_DELIMITER); WHILE J < LEN LOOP J := INSTR(P_STR, P_DELIMITER, I); IF J = 0 THEN J := LEN; STR := SUBSTR(P_STR, I); MY_SPLIT.EXTEND; MY_SPLIT(MY_SPLIT.COUNT) := STR; IF I >= LEN THEN EXIT; END IF; ELSE STR := SUBSTR(P_STR, I, J - I); I := J + LEN1; MY_SPLIT.EXTEND; MY_SPLIT(MY_SPLIT.COUNT) := STR; END IF; END LOOP; RETURN MY_SPLIT; END; -- 检测节点是否包含函数 FUNCTION COUNT_DIST_CODE(IN_DIST_CODE IN VARCHAR2, IN_TYPE_CODE IN VARCHAR2, COMPARE_DIST_CODE IN VARCHAR2) RETURN NUMBER IS V_COUNT NUMBER; BEGIN -- 如果原寄地的级别为国家,下钻到省,市 IF IN_TYPE_CODE = 1 THEN SELECT COUNT(0) INTO V_COUNT FROM (WITH CODES AS (SELECT T.DIST_CODE FROM TM_DISTRICT T WHERE T.TYPE_CODE = 2 AND T.COUNTRY_CODE = IN_DIST_CODE) SELECT DIST_CODE FROM CODES UNION SELECT T.DIST_CODE FROM TM_DISTRICT T, CODES C WHERE T.PROVINCE_CODE = C.DIST_CODE AND T.TYPE_CODE = 3 UNION SELECT IN_DIST_CODE FROM DUAL) R WHERE R.DIST_CODE = COMPARE_DIST_CODE; -- 如果原寄地的级别为省,下钻到市,上溯到国家 ELSIF IN_TYPE_CODE = 2 THEN SELECT COUNT(0) INTO V_COUNT FROM (SELECT T.COUNTY_CODE AS DIST_CODE FROM TM_DISTRICT T WHERE T.DIST_CODE = IN_DIST_CODE UNION SELECT T.DIST_CODE FROM TM_DISTRICT T WHERE T.TYPE_CODE = 3 AND T.PROVINCE_CODE = IN_DIST_CODE UNION SELECT IN_DIST_CODE FROM DUAL) R WHERE R.DIST_CODE = COMPARE_DIST_CODE; -- 如果原寄地的级别为市,上溯到市,国家 ELSIF IN_TYPE_CODE = 3 THEN SELECT COUNT(0) INTO V_COUNT FROM (WITH CODES AS (SELECT PROVINCE_CODE FROM TM_DISTRICT T WHERE T.DIST_CODE = IN_DIST_CODE) SELECT T.DIST_CODE FROM TM_DISTRICT T, CODES C WHERE T.DIST_CODE = C.PROVINCE_CODE AND T.TYPE_CODE = 1 UNION SELECT C.PROVINCE_CODE FROM CODES C UNION SELECT IN_DIST_CODE FROM DUAL) R WHERE R.DIST_CODE = COMPARE_DIST_CODE; END IF; RETURN V_COUNT; END; -- 检查维度是否存在交集 FUNCTION COUNT_DMNSN(IN_