各位大大好..我有一個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');