日期:2014-05-17  浏览次数:20721 次

一个存储过程,快来帮忙查错
CREATE OR REPLACE PROCEDURE EA_MARKET_INTERFACE.P_GetCustInfo_Active(
TITLE OUT VARCHAR2, --结果集字段TITLE描述表名
NAME OUT VARCHAR2, --结果集字段名描述表名
RESULT OUT SYS_REFCURSOR, --结果集临时表名描述
AGENT_ID IN VARCHAR2  
)IS

RESERVE_TIME NUMERIC(14);--预约回复的时间范围
DATE INTEGER;
TIME INTEGER;
MIN INTEGER;
SRC_CUST_CODE VARCHAR(20);
TEMP_SQL VARCHAR2(1000);
BEGIN
  --取预提的时间(分钟)
  SELECT CAST(PARAM_VAL AS INTEGER) INTO COLLECT_CUST_INC_MIN
  FROM PARAM_DEF
  WHERE PARAM_CODE='MIN';

  TIME:=CAST(TO_CHAR(SYSDATE,'HH24MISS')AS INTEGER);
  DATE:=CAST(TO_CHAR(SYSDATE,'YYYYMMDD') AS INTEGER);
  COLLECT_CUST_INC_MIN:=COLLECT_CUST_INC_MIN*60;
  --计算预约回复的时间范围
  CALL ADD_TIME(TIME,MIN);--调用另一个存储过程,这里也报错

  RESERVE_TIME:=DATE*1000000+TIME;

  TEMP_SQL:='CREATE GLOBAL TEMPORARY TABLE VT_RESULT(
CUST_CODE VARCHAR2(20) NOT NULL  
,CUST_NAME VARCHAR2(60)  
,CUST_SEX VARCHAR2(10)  
,DEPT_CODE VARCHAR2(10)  
,DEPT_NAME VARCHAR2(100)  
,CUST_AGE NUMERIC(3)  
,CUST_KIND CHAR(1)
,EDUCATION VARCHAR2(50)  
,VOCATION VARCHAR2(50)  
,INCOME_LEVEL VARCHAR2(50)  
,PRIVATE_PHONE1 VARCHAR2(20)  
,PRIVATE_PHONE2 VARCHAR2(20)  
,PRIVATE_PHONE3 VARCHAR2(20)  
,PUBLIC_PHONE VARCHAR2(20)  
,EMAIL VARCHAR2(80)  
,MKT_PHONE1 VARCHAR2(20)  
,MKT_PHONE2 VARCHAR2(20)  
,MKT_PHONE3 VARCHAR2(20)  
,MKT_PHONE4 VARCHAR2(20)  
,MKT_PHONE5 VARCHAR2(20)  
,RESERVE_TIME NUMERIC(14)  
,RESERVE_PHONE VARCHAR2(20)  
,MKT_MEMO VARCHAR2(500)  
)';
EXECUTE IMMEDIATE TEMP_SQL;--建一个临时表

  BEGIN TRANSACTION;
  LOCKING TABLE EA_MARKET.MS_RESERVE_CUST_INDEX FOR EXCLUSIVE--这个报错了,不知道怎么改

  SELECT CUST_CODE INTO SRC_CUST_CODE
  FROM RESERVE_CUST_INDEX A
  WHERE A.RESERVE_TIME<=AI_RESERVE_TIME
  AND A.PRODUCT_CLASS_CODE='01'
  SAMPLE 1;

  IF COALESCE(AC_SRC_CUST_CODE,'')<>'' THEN
  DELETE FROM EA_MARKET.MS_RESERVE_CUST_INDEX
  WHERE SRC_CUST_CODE=AC_SRC_CUST_CODE;
  END IF;
  END TRANSACTION;


  IF COALESCE(ASRC_CUST_CODE,'')='' THEN
  BEGIN TRANSACTION;
  LOCKING TABLE TARGET_CUST_INDEX FOR EXCLUSIVE
  SELECT SRC_CUST_CODE INTO AC_SRC_CUST_CODE
  FROM EA_MARKET.MS_TARGET_CUST_INDEX A
  WHERE A.PRODUCT_CLASS_CODE='01'
  SAMPLE 1;
  DELETE FROM EA_MARKET.MS_TARGET_CUST_INDEX
  WHERE SRC_CUST_CODE=AC_SRC_CUST_CODE;
  END TRANSACTION;
  END IF;

  IF COALESCE(AC_SRC_CUST_CODE,'')<>'' THEN
INSERT INTO VT_RESULT
SELECT COALESCE(A.SRC_CUST_CODE,'')
,COALESCE(A.CUST_NAME,'')
,COALESCE(A.SEX_CODE,'')
,COALESCE(A.DEP_CODE,'')
,COALESCE(A.AGE,0)
,COALESCE(A.CUST_KIND,'F')
,COALESCE(A.EDU_CODE,'')
,COALESCE(A.VOC_CODE,'')
,COALESCE(A.EARN_LEVEL_CODE,'')
,COALESCE(A.PRIVATE_PHONE1,'')
,COALESCE(A.PRIVATE_PHONE2,'')

FROM EA_MARKET.