F_checksal不是过程,或者在编译plsql时未定义
当我试图编译此plsql时,我不断收到以下错误消息:F_checksal不是过程,或者在编译plsql时未定义,plsql,Plsql,当我试图编译此plsql时,我不断收到以下错误消息: 'F_checksal is not a procedure or is undefined' 代码如下: declare e_high_increase EXCEPTION; old_sal NUMBER; function f_checkSal(i_sal number,i_old_sal IN OUT NUMBER) return VARCHAR2 is begin if((i_sal/old_sal)*100&g
'F_checksal is not a procedure or is undefined'
代码如下:
declare
e_high_increase EXCEPTION;
old_sal NUMBER;
function f_checkSal(i_sal number,i_old_sal IN OUT NUMBER) return VARCHAR2 is
begin
if((i_sal/old_sal)*100>300) then
raise e_high_increase;
else
return 'yes';
end if;
exception when e_high_increase then
insert into t_logerror(error_tx) values ('this is user exception');
dbms_output.put_line('this is user exception');
return 'No';
end;
begin
select sal into old_sal FROM emp where empno=153;
f_checksal(30000,old_sal);
update emp set sal=30000 where empno=153;
end;
你的语法太离谱了。您需要首先创建函数,然后在pl/sql块中引用它: 步骤1:
CREATE OR REPLACE FUNCTION f_checksal (i_sal NUMBER, i_old_sal IN OUT NUMBER)
RETURN VARCHAR2
IS
old_sal NUMBER;
e_high_increase EXCEPTION;
BEGIN
IF ((i_sal / old_sal) * 100 > 300)
THEN
RAISE e_high_increase;
ELSE
RETURN 'yes';
END IF;
EXCEPTION
WHEN e_high_increase
THEN
INSERT INTO t_logerror
(error_tx
)
VALUES ('this is user exception'
);
DBMS_OUTPUT.put_line ('this is user exception');
RETURN 'No';
END;
/
步骤2:
DECLARE
old_sal NUMBER;
RESULT VARCHAR2 (100);
BEGIN
SELECT sal
INTO old_sal
FROM emp
WHERE empno = 153;
RESULT := f_checksal (30000, old_sal);
UPDATE emp
SET sal = 30000
WHERE empno = 153;
END;
请注意,您的函数有一个返回值,您没有在调用代码中指定该值。需要更改的只是您对函数的调用
您可以通过调用过程(例如,
DBMS\u OUTPUT.put\u line(f\u checksal(30000,old\u sal));
)使用结果,或者将其分配给局部变量,例如,result:=f\u checksal(30000,old\u sal)代码>这是脚本文件吗?不能创建这样的函数。您必须单独创建函数,然后从SQL脚本调用。@OldProgrammer,在匿名块中声明函数当然是可能的。语法不是“太离谱”。在块中使用函数不需要创建函数。只有在需要从SQL调用函数时,才需要将其创建为单独的模式对象。