2014-11-28 6 views
0

PL/SQL의 함수에서 2 개의 값을 반환하려고했습니다. 첫 번째 가치는 내가 찾고자하는 사람의 봉급이되고 싶습니다. 두 번째는이 문제의 영향을받는 행의 수를 원합니다. 나는 잠시 동안 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

도 교체'(out_var 값으로 salariu을 삽입, @@ ROWCOUNT);'할당 문과 함께'out_var.val1 : = salariu; out_var.val1 : = 1;', 당신은 객체에 값을 삽입 할 수 없습니다. pl/sql의 경우 – mikron

+0

나는 다음을 참조하십시오 : 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