存储过程返回值Db2
在编程中,它们不使用存储过程返回值(它们使用函数)。为什么DB2支持这种方式存储过程返回值Db2,db2,Db2,在编程中,它们不使用存储过程返回值(它们使用函数)。为什么DB2支持这种方式 在我上面的例子中,存储过程B如何从存储过程A知道c1游标?如果我在存储过程B中声明一个游标(c2游标),并发送到存储过程a。存储过程a有一个参数(OUT c2游标),那么为什么我必须写“RESULT SETS 1”(我不能省略这个短语),因为我不从存储过程a返回任何游标(我通过参数返回).您可能会从一些有关SQL PL的教育和培训中受益 如果您喜欢纸质书,请阅读Paul Yip、Drew Bradstock和其他人的“
在我上面的例子中,存储过程B如何从存储过程A知道c1游标?如果我在存储过程B中声明一个游标(
c2游标
),并发送到存储过程a。存储过程a有一个参数(OUT c2游标
),那么为什么我必须写“RESULT SETS 1”(我不能省略这个短语),因为我不从存储过程a返回任何游标(我通过参数返回).您可能会从一些有关SQL PL的教育和培训中受益
如果您喜欢纸质书,请阅读Paul Yip、Drew Bradstock和其他人的“Linux、Unix和Windows的Db2 SQL过程语言”。ISBN 0-13-100772-6
Stackoverflow不能替代培训和教育
你应该针对不同的主题提出不同的问题
研究Db2“表函数”以了解如何从函数返回表
研究Db2“强类型游标”和Db2“弱类型游标”以及流水线函数,了解如何在例程中利用游标参数。理解与这些事情相关的许多限制和规则,这些限制和规则不能用一个问题中的一个例子来表达。特别是,要认识到SQL PL游标参数只能由SQL PL完全操作,当前不能传递给其他语言进行处理(jdbc除外,jdbc支持使用此类游标)。因此,如果前端客户机使用C、C++、Python、JavaScript、.NET、PHP等,那么当前将不使用SQLPL游标参数。但是,您可以在DB2SQLPL代码中使用它们,这取决于您的技能和需要
要使用嵌套存储过程的结果集,需要额外的语法。从存储过程返回结果集时,定义过程时需要动态结果集
子句。许多不同的编程语言和框架以及其他RDBMS工具都理解以这种方式返回结果集,因此将数据从RDBMS返回到第三代编程语言的最通用方法也是如此。基于此技术,还可以构建其他机制
所有这些语法都记录在您的版本和平台的Db2知识中心中。一个例子不能表达所有可能的语法
这里是一个例子,如果你能胜任搜索,你会在网上找到很多其他人
CREATE PROCEDURE A()
LANGUAGE SQL
RESULT SETS 1
BEGIN
DECLARE C1 CURSOR WITH RETURN FOR
SELECT id, name, dept, job FROM staff;
OPEN C1;
END
CREATE PROCEDURE B()
LANGUAGE SQL
BEGIN
Call a ;
END
实际上,我们至少能够从JDBC访问游标参数。接受,回答澄清。现在还不知道IBM将来会把它带到哪里去。
--#SET TERMINATOR @
CREATE or replace PROCEDURE procA()
LANGUAGE SQL
RESULT SETS 1
BEGIN
DECLARE C1 CURSOR WITH RETURN TO CALLER FOR
SELECT id, name, dept, job FROM staff;
OPEN C1;
END
@
set serveroutput on@
CREATE or replace PROCEDURE B()
LANGUAGE SQL
BEGIN
declare sqlstate char(5) default '00000';
declare v_rs result_set_locator varying;
declare v_id smallint;
declare v_dept smallint;
declare v_name varchar(9);
declare v_job char(5);
Call procA() ;
associate result set locator (v_rs) with procedure procA;
allocate v_rscur cursor for result set v_rs;
fetch from v_rscur into v_id, v_name, v_dept, v_job;
while ( sqlstate = '00000') do
-- do something with the values just fetched...
-- i.e. process the data in the current row of the result-set
call dbms_output.put_line('id:'||varchar(v_id)||' name: '||v_name||' dept: '||varchar(v_dept)||' job: '||v_job);
-- in this example just write the data to the output stream
fetch from v_rscur into v_id, v_name, v_dept, v_job;
end while;
return;
END
@