我是一名学生,我有这样一个练习:我们必须编写一个带有两个参数(账号和取款)的函数,并且只有当账户余额-取款〉流量阈值时,才返回银行账户的新余额
这是我的代码:
set serveroutput on
CREATE OR REPLACE FONCTION Retrait
(f_numcomp in varchar2,f_montant NUMBER(38,3))
RETURN NUMBER(38,3)
AS
v_compte compte%rowtype;
v_solde compte.Solde%type;
BEGIN
SELECT * into v_compte from compte where f_numcomp = compte.NUMEROCOMPTE;
if (v_compte.Solde - f_montant) > v_compte.SeuilDebit /*and compte.Etat != 'desactiver'*/ THEN
v_solde := v_compte.Solde - f_montant;
UPDATE compte SET Solde = Solde - f_montant where f_numcomp = compte.NumeroCompte;
else
dbms_output.put_line('solde insufusant!');
end if;
return(v_solde);
END Retrait;
/
这是我得到的:
错误报告-
ORA-06550:第9行,第16列:
PLS-00103:符号“(“在以下符号的位置进行比较:
上。
06550. 00000 -“第%s行,第%s列:\n%s”
- 原因:通常是PL/SQL编译错误。
- 操作:
我是新来的;我在这里看了一些文章,但仍然没有发现错误
2条答案
按热度按时间lp0sw83n1#
您应该能够简化该函数,使用带有
RETURNING
子句的单个UPDATE
语句(而不是先使用SELECT
,然后使用UPDATE
):但是,在函数中使用DML语句并不常见;通常使用
PROCEDURE
并使用OUT
参数返回值。fiddle
pbwdgjma2#
FONCTION
必须是FUNCTION
,但这显然只是请求中的一个排印错误,因为您得到的错误是其他错误。在函数声明中,Oracle需要不带精度的类型。例如,
NUMBER
而不是NUMBER(38, 3)
。