|
CREATE OR REPLACE PROCEDURE "P_INSERTT_USER"(IUSERNAME VARCHAR2,
IUSERDEF VARCHAR2,
IPASSWORD VARCHAR2,
IUSERTYPE NUMBER,
ICORPID NUMBER,
IADMINERID NUMBER,
ICUSTOMERID NUMBER,
ITEAMID VARCHAR2, --车队ID,以逗号分隔 ILINKTEL VARCHAR2,
IEMAIL VARCHAR2,
ILINKADDERSS VARCHAR2,
IHYCAR NUMBER,
IPARENTID NUMBER,
OPRO_CODE OUT NUMBER, --错误吗
OPRO_DESC OUT VARCHAR2 --错误描述
) AS
BEGIN
DECLARE
IUSERID NUMBER;
IUNITIDS CLOB; --以逗号分隔的车台ID字符串
BEGIN
OPRO_CODE := -1;
OPRO_DESC := '';
IF (IUSERNAME IS NULL OR IUSERDEF IS NULL OR IPASSWORD IS NULL OR
IUSERTYPE IS NULL) THEN
OPRO_CODE := -1;
OPRO_DESC := '传输数据不合法!';
ELSE
SELECT SNT_USER.NEXTVAL INTO IUSERID FROM DUAL;
INSERT INTO T_USER
(USERID,
USERNAME,
USERDEF,
PASSWORD,
USERTYPE,
CORPID,
ADMINERID,
STAMP,
LINKTEL,
EMAIL,
LINKADDERSS,
HYCAR,
PARENTID)
VALUES
(IUSERID,
IUSERNAME,
IUSERDEF,
IPASSWORD,
IUSERTYPE,
ICORPID,
IADMINERID,
SYSDATE,
ILINKTEL,
IEMAIL,
ILINKADDERSS,
IHYCAR,
IPARENTID);
IF ((ITEAMID IS NOT NULL) AND (ITEAMID <> '-1')) THEN
IUNITIDS := '';
FOR V IN (SELECT DISTINCT T.UNITID, T.TEAMID
FROM T_USER_CAR T
WHERE T.TEAMID IN (ITEAMID)) LOOP
IUNITIDS := IUNITIDS || V.UNITID || ',';
END LOOP;
IF (IUNITIDS <> '') THEN
IUNITIDS := SUBSTR(IUNITIDS, 1, LENGTH(IUNITIDS) - 1);
END IF;
P_INSERTT_CUSTOMER_UNIT_HERIT(IUSERID, IUNITIDS, 1, IPARENTID);
END IF;
COMMIT;
OPRO_CODE := IUSERID;
OPRO_DESC := '添加用户成功!';
END IF;
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
OPRO_CODE := -1;
OPRO_DESC := SQLERRM || ',' || OPRO_DESC;
END;
END;
END;
说明:T_USER_CAR 表中的TEAMID是NUMBER类型。
我直接在PL/SQL中执行
SELECT DISTINCT T.UNITID, T.TEAMID
FROM T_USER_CAR T
WHERE T.TEAMID IN (1300,1850)
是事以成功执行的,但我通过存储过程传过来就不行了,谁能告诉我为什么,怎么处理呀?谢谢
[ 本帖最后由 冷月宫主 于 2011-5-29 17:16 编辑 ] |
|