Как сделать функцию в Oracle? - PullRequest
0 голосов
/ 26 февраля 2019

Привет, я делаю функцию в Oracle, но она выдает ошибку, и я не знаю, почему

здесь есть функция

CREATE OR REPLACE FUNCTION f_increment_salary15 (psueldo number)
return number 
IS
    v_ventas number;
    valorretornado number;
BEGIN 
    v_ventas:=0;
    valorretornado:=0;
    SELECT ee.nombre, COUNT(ve.IdEmpleado) INTO v_ventas FROM empleado ee INNER JOIN
    venta ve ON ee.idempleado = ve.idempleado 
    GROUP BY ee.nombre;
    IF v_ventas > 500 THEN
        valorretornado := psueldo + (psueldo * 0.15);
    ELSE valorretornado := psueldo + (psueldo * 0);
    END IF;
    return valorretornado;
END;
/

, а здесь ошибка

ERROR
--------- -------------------------------------------------------------
PL/SQL: SQL Statement ignored
PL/SQL: ORA-00947: not enough values

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Еще один комментарий: вы делаете SELECT INTO с GROUP BY, что подразумевает, что вы ожидаете более одного возможного значения для ee.nombre.Если это так, то вы получите исключение too_many_rows: вы не можете выбрать несколько строк в одну переменную.

Если вместо этого вы просто ищете общее количество строк, вы можете удалить ee.nombre из SELECT и полностью удалить GROUP BY.

SELECT COUNT(ve.idempleado)
  INTO v_ventas
  FROM empleado ee
 INNER JOIN venta ve
    ON ee.idempleado = ve.idempleado;

Если вас интересует толькоee.nombre значения, где количество> 500, вы можете посмотреть на предложение HAVING, но в этом сценарии вы бы имели GROUP BY и, следовательно, должны обрабатывать несколько строк.

SELECT ee.nombre,
       COUNT(ve.idempleado)
  FROM empleado ee
 INNER JOIN venta ve
    ON ee.idempleado = ve.idempleado
 GROUP BY ee.nombre
HAVING COUNT(ve.idempleado) > 500;

Кажется, что, возможно,Вы намеревались передать другой параметр?Возможно, вы хотите посчитать ve.idempleado для одного ee.nombre?

SELECT COUNT(ve.idempleado)
  INTO v_ventas
  FROM empleado ee
 INNER JOIN venta ve
    ON ee.idempleado = ve.idempleado
 WHERE ee.nombre = :something;
0 голосов
/ 26 февраля 2019

вы выбираете ee.nombre, COUNT (ve.IdEmpleado), но присваиваете его только 1 переменной

, попробуйте ниже

 SELECT ee.nombre, COUNT(ve.IdEmpleado) INTO v_ventas,valorretornado FROM empleado ee INNER JOIN
    venta ve ON ee.idempleado = ve.idempleado 
    GROUP BY ee.nombre;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...