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

procedure無法建立
各位大大好..我有一個procedure如下..但是不知哪裡錯誤...無法建立成功,
請各位版大指導..謝謝!

CREATE OR REPLACE procedure GetSerialNo RETURN VARCHAR2 IS
  v_DateStr   VARCHAR2(10); --系統日期對應的字串
  v_SerialNum NUMBER(4); --流水序號
BEGIN
  --取系統日期生成需要的字串
  v_DateStr := TO_CHAR(SYSDATE, ('YYYYMMDD'));
  --生成產生流水號的序號
  BEGIN
    SELECT Decode(LIN_STKM, v_DateStr, (MON_STKM + 1), 1)
      INTO v_SerialNum
      FROM astkm;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      v_SerialNum := 1;
      INSERT INTO astkm (LIN_STKM, MON_STKM) VALUES (v_DateStr, v_SerialNum);
  END;
  --修改流水號參數
  UPDATE astkm SET LIN_STKM = v_DateStr, MON_STKM = v_SerialNum;
  COMMIT;
  --得到需要的流水號
  RETURN v_DateStr || Lpad(v_SerialNum, 4, '0');
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
    RETURN NULL;
END;

------解决方案--------------------
这是一个存储过程不能直接用 RETURN?VARCHAR2 需要out参数 GetSerialNo(v out varchar2(100))
 v_DateStr := TO_CHAR(SYSDATE, ('YYYYMMDD')); 

应为v_DateStr := TO_CHAR(SYSDATE, 'YYYYMMDD');