我要做的是插入表格" info"不同的内容,具体取决于选择的结果:如果它是一行,没有行或多行。 我想在异常部分设置outretvalue变量,然后根据outretvalue值在IF部分中进行插入。 无论如何,我在编译错误时说 f2函数处于无效状态。我有2个错误:INSERT和不识别rowcount 。为什么呢?
CREATE OR REPLACE FUNCTION f2 (v_nume employees.last_name%TYPE DEFAULT 'Bell')
RETURN NUMBER
IS
salariu employees.salary%type;
outretvalue number(2) := 0;
BEGIN
SELECT salary
INTO salariu
FROM employees
WHERE last_name = v_nume;
RETURN salariu;
EXCEPTION
WHEN NO_DATA_FOUND THEN
outretvalue := 1;
WHEN TOO_MANY_ROWS THEN
--at this row I have 2 errors: for the INSERT and for not recognising rowcount
INSERT INTO info(`no_lines`) VALUES(SQL%ROWCOUNT);
END f2;
/
SELECT f2('King') FROM dual;
答案 0 :(得分:1)
你的职能:
DECLARE
BEGIN
END;
... something
END;
在开始时添加另一个BEGIN或在现有BEGIN END块内移动IF并删除第二个END。
编辑:澄清之后
CREATE OR REPLACE FUNCTION f2 (v_nume employees.last_name%TYPE DEFAULT 'Bell')
RETURN NUMBER
IS
salariu employees.salary%type;
outretvalue number(2) := 0;
BEGIN
SELECT salary
INTO salariu
FROM employees
WHERE last_name = v_nume;
RETURN salariu;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN -1;
WHEN TOO_MANY_ROWS THEN
SELECT count(*)
INTO salariu
FROM employees
WHERE last_name = v_nume;
INSERT INTO info(no_lines) VALUES(salariu);
RETURN -2;
WHEN OTHERS THEN
RETURN -3;
END f2;
/
SET SERVEROUTPUT on
DECLARE
l_ret NUMBER;
BEGIN
dbms_output.put_line(f2('Bell'));
dbms_output.put_line(f2('noBell'));
dbms_output.put_line(f2('King'));
END;
答案 1 :(得分:1)
var count = $('input:not(.correct, .defalut)').length;
alert( "Number of inputs not have classnames 'correct' or 'defalut' : " + count );
$('input').slice(1).filter(':not(.correct, .defalut)').first().focus();
答案 2 :(得分:0)
Oracle将编译错误保存在表中。我使用以下查询来检索存储的procs / funcs中的PL / SQL错误:
SELECT '*** ERROR in ' || TYPE || ' "' || NAME || '", line ' || LINE || ', position ' || POSITION || ': ' || TEXT
FROM SYS.USER_ERRORS
您可以尝试运行它,看看它是否有助于识别函数中的错误。