2014-11-28 8 views
0

Я пытаюсь вернуть 2 значения из функции в PL/SQL. Первое значение, которое я хочу, чтобы это была зарплата парня, которого я должен искать. Во-вторых, я хочу, чтобы это количество строк, затронутых этим. Я искал google некоторое время, и я узнал, что должен сначала создать тип, чтобы я мог вернуть данные. Однако я получаю сообщение об ошибке:Функция Возвращение нескольких значений SQL

Error(9,1): PL/SQL: SQL Statement ignored 
Error(9,36): PL/SQL: ORA-00936: missing expression 

Код, который у меня есть:

CREATE OR REPLACE TYPE return_type AS OBJECT(val1 NUMBER,val2 NUMBER); 


CREATE OR REPLACE FUNCTION f2 
(v_nume employees.last_name%TYPE DEFAULT 'Bell') 
RETURN return_type IS 

out_var return_type; 
salariu employees.salary%type; 

BEGIN 

SELECT salary INTO salariu 
FROM employees 
WHERE last_name = v_nume; 

INSERT INTO out_var values(salariu,@@ROWCOUNT); 

RETURN out_var; 

EXCEPTION 

WHEN NO_DATA_FOUND THEN 
RAISE_APPLICATION_ERROR(-20000, 'Nu exista angajati cu numele dat'); 
WHEN TOO_MANY_ROWS THEN 
RAISE_APPLICATION_ERROR(-20001, 'Exista mai multi angajati cu numele dat'); 
WHEN OTHERS THEN 
RAISE_APPLICATION_ERROR(-20002,'Alta eroare!'); 
END f2; 
/
+0

Заменить также 'INSERT INTO out_var значений (Заработная, @@ ROWCOUNT); 'с операторами присваивания' out_var.val1: = salariu; out_var.val1: = 1; ', вы не можете вставлять значения в объект, в случае pl/sql – mikron

+0

я вижу: P спасибо mikron –

ответ

1

Я сделал это так:

CREATE OR REPLACE FUNCTION f2 
(v_nume employees.last_name%TYPE DEFAULT 'Bell', 
nr OUT employees.salary%TYPE) 
RETURN NUMBER IS 

salariu employees.salary%type; 

BEGIN 

SELECT salary INTO salariu 
FROM employees 
WHERE last_name = v_nume; 
nr := SQL%ROWCOUNT; 
RETURN salariu; 

EXCEPTION 
WHEN NO_DATA_FOUND THEN 
RAISE_APPLICATION_ERROR(-20000, 
'Nu exista angajati cu numele dat'); 
WHEN TOO_MANY_ROWS THEN 
RAISE_APPLICATION_ERROR(-20001, 
'Exista mai multi angajati cu numele dat'); 
WHEN OTHERS THEN 
RAISE_APPLICATION_ERROR(-20002,'Alta eroare!'); 
END f2; 
/
+0

' nr' не имеет смысла в этом сценарии: он всегда будет на'1 '. В любом другом случае возникает исключение (данные не найдены или слишком много строк). – Glenn

+0

Да, я понимаю, что: D, однако эта функция будет развиваться дальше, и nr будет иметь роль там –

+0

Я вижу. Удачи! – Glenn

Смежные вопросы