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

高手帮忙看看这段代码,是oracle8.0的存储过程,编译不过去。
CREATE   OR   REPLACE     PROCEDURE   "BSFF ". "DEPOSIT "         (APROVIDERID   IN  
        VARCHAR,ACARDID   IN   VARCHAR,ABOOKCOUNT   IN   NUMBER,ABOOKPRICE   IN  
NUMBER,ATOTALMONEY   IN   NUMBER,AOPERATION   IN   VARCHAR,AREMARK   IN   VARCHAR)
AS
V_COUNT   NUMBER;
V_BALANCE   NUMBER;

BEGIN

SELECT   COUNT(*)   INTO   V_COUNT   FROM   "ACCOUNT "   WHERE   PROVIDERID=APROVIDERID;
IF   V_COUNT=0   THEN
INSERT   INTO   "ACCOUNT "(PROVIDERID,BALANCE)   VALUES(APROVIDERID,0);
END   IF;

SELECT   BALANCE   +   ATOTALMONEY   INTO   V_BALANCE   FROM   "ACCOUNT "   WHERE   PROVIDERID   =   APROVIDERID;
IF   V_BALANCE   >   0   THEN
UPDATE   "ACCOUNT "   SET   BALANCE   =   BALANCE   +   ATOTALMONEY   WHERE   PROVIDERID   =   APROVIDERID;

INSERT   INTO   WASTEBOOK(PROVIDERID,CARDID,BUYDATE,BOOKCOUNT,BOOKPRICE,TOTALMONEY,BALANCE,OPERATION,REMARK)
VALUES(APROVIDERID,ACARDID,SYSDATE,ABOOKCOUNT,ABOOKPRICE,ATOTALMONEY,V_BALANCE,AOPERATION,AMREMARK);
END   IF;

END   DEPOSIT;

高手帮看看,随便给优化一下。谢谢

------解决方案--------------------
未commit
CREATE OR REPLACE PROCEDURE "BSFF ". "DEPOSIT "
(APROVIDERID IN VARCHAR,
ACARDID IN VARCHAR,
ABOOKCOUNT IN NUMBER,
ABOOKPRICE IN NUMBER,
ATOTALMONEY IN NUMBER,
AOPERATION IN VARCHAR,
AREMARK IN VARCHAR)
AS
V_COUNT NUMBER;
V_BALANCE NUMBER;

BEGIN

SELECT COUNT(*) INTO V_COUNT
FROM "ACCOUNT "
WHERE PROVIDERID=APROVIDERID;
IF V_COUNT=0 THEN
INSERT INTO "ACCOUNT "(PROVIDERID,BALANCE) VALUES(APROVIDERID,0);
COMMIT; -------APPENDED
END IF;

SELECT BALANCE + ATOTALMONEY INTO V_BALANCE
FROM "ACCOUNT "
WHERE PROVIDERID = APROVIDERID;
IF V_BALANCE > 0 THEN
UPDATE "ACCOUNT " SET BALANCE = BALANCE + ATOTALMONEY WHERE PROVIDERID = APROVIDERID;

INSERT INTO WASTEBOOK(PROVIDERID,CARDID,BUYDATE,BOOKCOUNT,BOOKPRICE,TOTALMONEY,BALANCE,OPERATION,REMARK)
VALUES(APROVIDERID,ACARDID,SYSDATE,ABOOKCOUNT,ABOOKPRICE,ATOTALMONEY,V_BALANCE,AOPERATION,AMREMARK);
COMMIT; -------APPENDED
END IF;

END DEPOSIT;