2014-03-26 4 views
0

DB2에서 아래의 Oracle 프로 시저를 만들 수 있습니까? 열 같은 테이블 이름은 모음을 얻기 위해 몇 가지 예를 들어 있습니다 또한 DB2에 사용할 수 있지만 당신이 여기 복귀를보다 효율적으로 사용하는 기능을 원하는 경우 스크립트 아래DB2에서 저장 프로 시저를 만드는 방법

CREATE OR REPLACE PROCEDURE sample_proc (ACCT_NO in CHAR,p_cursor out SYS_REFCURSOR) 
is 
BEGIN 
OPEN p_cursor FOR 
select sampl1,sample2,sample3 
from 
table_test b 
where 
rec_id='A' 
and sample3=ACCT_NO ; 
END; 
+1

"작동하지 않음"을 정의하십시오. 어떤 오류 메시지 또는 동작이 나타 납니까? 또한, 당신은 그 절차가 무엇을 기대합니까? –

답변

0

작동하지 않습니다

CREATE TABLE table_test 
(
    sample1 VARCHAR2 (1000), 
    sample2 VARCHAR2 (1000), 
    sample3 VARCHAR2 (1000) 
); 

insert into table_test (sample1,sample2 ,sample3) 
values  ('daftest1','dsdtest1','sstsest3'); 
insert into table_test (sample1,sample2 ,sample3) 
values  ('FAStest1','fstest1','sstsest3'); 
insert into table_test (sample1,sample2 ,sample3) 
values  ('sdtest1','asdtest1','fstest3'); 
insert into table_test (sample1,sample2 ,sample3) 
values  ('test2','test2','test123'); 

CREATE OR REPLACE TYPE TEST_REC                
AS OBJECT (
    sample1 VARCHAR2(1000) 
    ,sample2 VARCHAR2(1000) 
    ,sample3 VARCHAR2(1000) 
); 

CREATE OR REPLACE TYPE TEST_REPORT_TABLE                
AS TABLE OF TEST_REC; 

CREATE OR REPLACE FUNCTION testing (p_acct_no IN varchar2) 
RETURN test_report_table 
IS 
v_rec test_rec; 
v_test_report_table test_report_table := test_report_table(); 
BEGIN 

FOR i IN (SELECT sample1,sample2,sample3 
FROM table_test b 
--where rec_id='A' 
where sample3=p_acct_no) 
LOOP 
     v_rec:=test_rec(NULL,NULL,NULL); 
dbms_output.put_line(i.sample1); 

     v_rec.sample1:=i.sample1; 
     v_rec.sample2:=i.sample2; 
     v_rec.sample3:=i.sample3; 
     v_test_report_table.EXTEND; 
     v_test_report_table(v_test_report_table.COUNT) :=v_rec; 


END LOOP; 


RETURN v_test_report_table; 




END; 

    select * from table(testing(p_acct_no=>'sstsest3')) 

enter image description here

동적 인 행을 추가 할 필요가없는 경우 대량 수집을 사용하는 것이 좋습니다. ically

CREATE OR REPLACE FUNCTION JSTRAUTI.testing (p_acct_no IN varchar2) 
RETURN test_report_table 
IS 
v_test_report_table test_report_table := test_report_table(); 


BEGIN 

SELECT test_rec(sample1,sample2,sample3) 
bulk collect into v_test_report_table 
FROM table_test b 
--where rec_id='A' 
where sample3=p_acct_no; 

RETURN v_test_report_table; 

END; 

같은 결과입니다.

+0

데이터 세트를 반환하기 전에 어떤 데이터 유형을 선언해야합니다. 거기서 어떤 종류의 데이터가 나오는지 선언/작성해야합니다. – user2879235

관련 문제