2011-11-10 4 views
3

저장 프로 시저가 있습니다. 그것으로부터 함수를 호출하고 싶습니다. 검색된 커서 레코드를 함수에 전달하고 싶습니다. 검색된 커서 레코드를 함수 인수로 전달할 수 있으며 함수 내부에서 어떻게 액세스 할 수 있습니까? 함수를 선언하려면 어떻게해야합니까?커서 레코드를 함수에 전달

CREATE OR REPLACE PROCEDURE의 service__update 값을 반환하지 않는 (오히려 절차보다 당신이 정말로 (당신이 값을 반환 할 것을 의미하는) 기능을 원하는 가정

cursor c_getData is 
    select * 
    from service_1 
    where status=5 ; 


begin 
    dbms_output.enable(null);  

    for rec in c_getData loop 

    function(rec) 

답변

4

로) 및 커서가 정말 하나의 테이블에서 모든 열을 선택된다고 가정하면, 당신은 고정 된 %ROWTYPE

SQL> create function get_empno(p_rec in emp%rowtype) 
    2 return number 
    3 is 
    4 begin 
    5 return p_rec.empno; 
    6 end; 
    7/

Function created. 
를받는 함수를 선언 할 수 있습니다

다음 프로 시저에서 해당 함수를 호출하십시오.

SQL> declare 
    2 l_empno emp.empno%type; 
    3 begin 
    4 for i in (select * from emp) 
    5 loop 
    6  l_empno := get_empno(i); 
    7  dbms_output.put_line(l_empno); 
    8 end loop; 
    9 end; 
10/
7369 
7499 
7521 
7566 
7654 
7698 
7782 
7788 
7839 
7844 
7876 
7900 
7902 
7934 

PL/SQL procedure successfully completed. 
+0

감사합니다. 우리는 오라클 10g를 사용합니다. 오라클에는 커서 레코드를 수정하는 방법이 있습니다. 앞에서 설명한 질문에 rec 변수를 사용하여 커서에서 검색 한 레코드를 저장합니다. rec.service_active = sysdate 레코드의 특정 열을 수정하고 나중에 테이블에 커밋 할 수 있습니까? – Arav

+0

@Arav - 아니요. REF CURSOR는 Oracle의 읽기 전용 구조입니다. 물론 레코드에서 데이터를 읽고 후속 UPDATE 문에서 해당 데이터를 기본 테이블에 사용할 수 있습니다. –

+0

정보를 제공해 주셔서 감사합니다. – Arav