2014-03-26 66 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

請定義「不工作」。你得到什麼錯誤信息或行爲?另外,你期望程序做什麼? – 2014-03-26 09:54:04

回答

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

或更好地使用批量收集,如果你不需要添加行動態理論上

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