프로 시저에 값 (급여)을 정의하는 함수를 삽입하려고합니다. 이 값은 테이블의 열 (직원)에 삽입해야합니다.oracle에 커서가있는 프로 시저에서 사용자 정의 함수 사용
테이블 (직원)에 삽입 될 다른 모든 값은 다른 테이블에서 데이터를 추출하는 커서 (프로 시저에서)에 의해 정의되지만 마지막 값 (급여)은 커서 대신에 내가 만든 함수로 정의됩니다. 내 프로 시저에 어떻게 추가하여 커서의 데이터를 각각의 열에 넣은 다음 함수가 테이블의 마지막 열에 대한 데이터를 생성합니까?
가 (이 삽입 문에서 값 급여에 필요한 줄 것이다 기능입니다) 도움이된다면 내 절차가
create or replace
PROCEDURE migratestuff
IS
CURSOR names_cursor
IS
select substr(staff.name, 0, instr(staff.name, ' ') - 1) as firstname,
substr(staff.name, instr(staff.name, ' ') + 1) as lastname,
lower(concat(substr(staff.name, 0,1), substr(staff.name, instr(staff.name, ' ') + 1)||'@mail.com')) as emails,
date_created
from staff;
employee_rec names_cursor%rowtype;
counter number := 1;
BEGIN
FOR employee_rec IN names_cursor
LOOP
INSERT INTO employee
(fname, lname,Email,emp_ID,hire_date,salary
) VALUES
(employee_rec.firstname, employee_rec.lastname,employee_rec.Emails,counter,
employee_rec.Date_created,SALARYFUNCTIONRESULTHERE
);
commit;
counter := counter +1;
END LOOP;
end;
내 기능입니다 :
CREATE OR REPLACE
FUNCTION salary_function(
in_date IN DATE)
RETURN NUMBER
IS
salary_out NUMBER(5);
BEGIN
IF to_char(in_date, 'YYYY') = '2013' THEN
salary_out :=7000;
ELSE
IF to_char(in_date, 'YYYY') = '2014' THEN
salary_out := 6000;
ELSE
IF to_char(in_date, 'YYYY') = '2015' THEN
salary_out := 5000;
END IF;
END IF;
END IF;
RETURN salary_out;
END;
어떤 아이디어? 대신
: 된 값 (employee_rec.firstname, employee_rec.lastname, employee_rec.Emails, 카운터, employee_rec.Date_created, salary_function (aDateVariable를) ) ; – Michal
이 명령문은 무시되며 열이 허용되지 않는다고 알려줍니다. – LightningBolt
그런 경우에는 어려운 방법으로 할 수 있습니다 :). 함수의 결과를 varchar2 변수에 저장하십시오. 그런 다음 변수를 사용하여 호출의 varchar2 표현을 만들고 EXECUTE IMMEDIATE를 실행합니다. – Michal