【问题标题】:How to Create Stored procedure in DB2如何在 DB2 中创建存储过程
【发布时间】:2014-03-26 05:36:47
【问题描述】:

您能帮我在 DB2 中创建以下 Oracle 过程吗? 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;

【问题讨论】:

  • 请定义“不工作”。你得到什么错误信息或行为?另外,您希望该程序做什么?

标签: sql oracle stored-procedures db2


【解决方案1】:

如果你想要一个更好的返回函数,这里有一些例子来获取集合

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'))

如果您不需要动态添加行,最好使用批量收集

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;

结果相同。

【讨论】:

  • 在你想要返回数据集之前,你必须声明它将是什么类型的数据。在那里你需要声明/创建什么类型的数据会出来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 2016-05-20
  • 2016-08-29
  • 2018-01-16
  • 1970-01-01
相关资源
最近更新 更多