db2 存储过程动态游标及函数返回值总结
来源:互联网 发布:网络导购员 编辑:程序博客网 时间:2024/05/17 08:50
SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","ZHSQ";
CREATE OR REPLACE PROCEDURE "ZHSQ"."QUERY_PICTURE" (
IN "USER_ORGS" VARCHAR(4000),
IN "BEGIN_ROW" INTEGER,
IN "END_ROW" INTEGER,
IN "ADMINTYPE" INTEGER,
IN "BASE_SQL" VARCHAR(4000),
OUT "SQL_TEXT" VARCHAR(4000) )
SPECIFIC "SQL160728011925574"
DYNAMIC RESULT SETS 2
LANGUAGE SQL
NOT DETERMINISTIC
EXTERNAL ACTION
MODIFIES SQL DATA
OLD SAVEPOINT LEVEL
BEGIN
DECLARE CUST_ID VARCHAR(4000);
DECLARE CO_ID VARCHAR(4000);
DECLARE CO_ORG VARCHAR(4000);
DECLARE STR_CUST_IDS VARCHAR(4000);
DECLARE QUERY_SQL VARCHAR(4000);
DECLARE COUNT_SQL VARCHAR(4000);
DECLARE STR_IDS_LENGTH INTEGER;
DECLARE CUR_CUST CURSOR for
SELECT C.PID FROM PICTURE C WHERE C.pSTATE <> -1;
DECLARE CUR_CUST_ORG_REL CURSOR for
SELECT RO.PICTUREID, cast(LISTAGG(O.ORGINCODE) as varchar(32670)) ORGS
FROM PICTURE_ORG_RELATION RO
LEFT JOIN ORGANIZATIONS O
ON O.ORGINCODE = RO.ORGINCODE
left join picture p
on p.pid = ro.pictureid
WHERE O.ORGSTATE <> -1
and p.pSTATE <> -1
GROUP BY RO.PICTUREID;
DECLARE CUR_COUNTS CURSOR with return to caller FOR v_stmt1;
DECLARE CUR_CUSTS CURSOR with return to caller FOR v_stmt2;
IF ADMINTYPE <> 1 THEN
OPEN CUR_CUST;
LOOP
FETCH CUR_CUST
INTO CUST_ID;
--EXIT WHEN CUR_CUST%NOTFOUND;
set STR_CUST_IDS = '';
OPEN CUR_CUST_ORG_REL;
LOOP
FETCH CUR_CUST_ORG_REL
INTO CO_ID, CO_ORG;
--EXIT WHEN CUR_CUST_ORG_REL%NOTFOUND;
IF DIFFCODE(USER_ORGS, CO_ORG) = 0 THEN
set STR_CUST_IDS = STR_CUST_IDS || '''' || cast(CO_ID as varchar(255)) || ''',';
END IF;
END LOOP;
CLOSE CUR_CUST_ORG_REL;
END LOOP;
CLOSE CUR_CUST;
END IF;
set STR_IDS_LENGTH = LENGTH(STR_CUST_IDS);
set QUERY_SQL = 'SELECT T.* FROM (' || BASE_SQL;
set COUNT_SQL = 'SELECT COUNT(*) FROM (' || BASE_SQL;
IF STR_IDS_LENGTH > 0 THEN
set STR_CUST_IDS = SUBSTR(STR_CUST_IDS, 1, LENGTH(STR_CUST_IDS) - 1);
set QUERY_SQL = QUERY_SQL || ' AND P.PID NOT IN (' || STR_CUST_IDS || ')';
set COUNT_SQL = COUNT_SQL || ' AND P.PID NOT IN (' || STR_CUST_IDS || ')';
END IF;
set QUERY_SQL = QUERY_SQL || ') T WHERE T.NUM > ' || BEGIN_ROW || ' AND T.NUM <= ' || END_ROW ;
set COUNT_SQL = COUNT_SQL || ') T';
-- SQL_TEXT = STR_CUST_IDS || ' : ' || ' == ' || QUERY_SQL;
prepare v_stmt1 from COUNT_SQL;
OPEN CUR_COUNTS;
prepare v_stmt2 from QUERY_SQL;
OPEN CUR_CUSTS;
END;
函数返回值
CREATE OR REPLACE FUNCTION "ZHSQ"."F_GET_LEVEL" (
fid_info VARCHAR(255)
)
RETURNS INTEGER
return with b(fid,parent_fid,level1) as ( select fid,parent_fid,1 from func where parent_fid = -1 union all select a.fid,a.parent_fid,level1+1 from func as a,b where b.fid = a.parent_fid ) select b.level1 from b where b.fid =fid_info
函数动态sql返回值
CREATE OR REPLACE FUNCTION "ZHSQ"."F_GET_ESTABLISH_CIRCLE_RATE" (
"V_ORGINCODE" VARCHAR(255),
"V_ECID" VARCHAR(255),
"V_AUDIT" VARCHAR(255) )
RETURNS INTEGER
SPECIFIC "SQL160727013623370"
LANGUAGE SQL
NOT DETERMINISTIC
EXTERNAL ACTION
READS SQL DATA
begin
DECLARE v_count INTEGER;
DECLARE v_str VARCHAR(512);
SET v_str = 'select count(0) INTO '||v_count||' from establish_circle t, circle_yhxx y where t.ecid = y.ecid(+) and t.ecstatus = ''1'' and t.orgincode = ''' || v_orginCode || '''';
if v_ecid is not null then
SET v_str = v_str || ' and t.ecid = ''' || v_ecid || '''';
end if;
if v_audit is not null then
SET v_str = v_str || ' and t.ecaudit = ''' || v_audit || '''';
end if;
values v_str into v_count;
return v_count;
end;
- db2 存储过程动态游标及函数返回值总结
- db2 存储过程及函数总结
- 存储过程返回游标
- 存储过程返回游标
- DB2存储过程使用游标
- java调用 Oracle存储过程(或函数) 返回游标、动态数组与
- 存储过程-动态游标
- oracle利用游标实现返回一个表形式数据集合的函数及存储过程
- oracle 动态调用存储过程,返回游标类型
- oracle 存储过程执行动态sql返回游标
- Oracle 存储过程及函数中游标+动态的sql处理
- 存储过程及游标
- 存储过程、函数、游标 .
- 函数&&存储过程&&游标
- Oracle存储过程返回游标
- oracle 存储过程返回游标
- DB2存储过程总结
- DB2 多游标存储过程测试
- linux下jdk的安装过程以及步奏
- mybatis中的resultMap与resultType的区别
- POJ2456(复赛模拟试题) 好斗的奶牛 解题报告
- cassandra修改表的primary
- 时间联动 动态根据参照时间进行累加
- db2 存储过程动态游标及函数返回值总结
- KMP 模板
- 【文件的读写操作】
- Redis | redis-cli INFO / avg_ttl value
- 我遇到的android.content.res.Resources$NotFoundException的解决方案
- POJ 3084 - Panic Room【网络流 最小割】
- Android 自定义 view 详解
- Swift字符转Ascii
- HDU 5763(Another Meaning kmp+dp)