PL / SQL INSERT忽略语句

时间:2015-12-06 18:56:54

标签: oracle plsql cursor oracle-sqldeveloper sql-function

我要做的是插入表格" 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;

3 个答案:

答案 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

您可以尝试运行它,看看它是否有助于识别函数中的错误。