Stored procedures 我可以在普通SQL中执行递归吗?-DB2版本9

Stored procedures 我可以在普通SQL中执行递归吗?-DB2版本9,stored-procedures,recursion,db2,Stored Procedures,Recursion,Db2,我正在创建一个存储过程来递归地执行某些操作。我想运行这样的程序: SELECT DISTINCT POLICY.CONTRACT_ID FROM POLICY INNER JOIN LOAN_PART ON POLICY.LOAN_DETAIL_ID=LOAN_PART.LOAN_DETAIL_ID INNER JOIN APPLICATION_CONTRACTSTUB ON LOAN_PART.LOAN_PART_ID=APPLICATION_CONTRACTSTUB.LOAN

我正在创建一个存储过程来递归地执行某些操作。我想运行这样的程序:

SELECT DISTINCT POLICY.CONTRACT_ID
  FROM POLICY
  INNER JOIN LOAN_PART ON POLICY.LOAN_DETAIL_ID=LOAN_PART.LOAN_DETAIL_ID
    INNER JOIN APPLICATION_CONTRACTSTUB ON LOAN_PART.LOAN_PART_ID=APPLICATION_CONTRACTSTUB.LOAN_PART_ID
        INNER JOIN CONTRACTSTUB ON APPLICATION_CONTRACTSTUB.CONTRACTSTUB_ID=CONTRACTSTUB.CONTRACTSTUB_ID
 WHERE CONTRACTSTUB.REF = VARYING_REF       
   AND CONTRACTSTUB.STUB_ID = VARYING_ID;
SET VARYING_ID = SUBSTR(RETURNED_VARCHAR, 3, 6);
SET VARYING_REF= SUBSTR(RETURNED_VARCHAR, 9, 8);
CONTRACT_STUB
CONTRACTSTUB_ID POL_REF POL_ID 1 qwerty 12345678 2 asdfgh 78945612 3 bnmxcv 45678912 4 dfghjk 14785236

APPLICATION_CONTRACTSTUB
LOAN_PART_ID CONTRACTSTUB_ID 1 1
2 2
3 3
4 4

LOAN_PART
LOAN_DETAIL_ID LOAN_PART_ID
1 1
2 2
3 3
4 4

POLICY
CONTRACT_ID LOAN_DETAIL_ID
00asdfgh78945612 1
00bnmxcv45678912 2
00dfghjk14785236 3
4

它返回一个VARCHAR,我想对其进行解析,以便为variable_ID和variable_REF获取新值,如下所示:

SELECT DISTINCT POLICY.CONTRACT_ID
  FROM POLICY
  INNER JOIN LOAN_PART ON POLICY.LOAN_DETAIL_ID=LOAN_PART.LOAN_DETAIL_ID
    INNER JOIN APPLICATION_CONTRACTSTUB ON LOAN_PART.LOAN_PART_ID=APPLICATION_CONTRACTSTUB.LOAN_PART_ID
        INNER JOIN CONTRACTSTUB ON APPLICATION_CONTRACTSTUB.CONTRACTSTUB_ID=CONTRACTSTUB.CONTRACTSTUB_ID
 WHERE CONTRACTSTUB.REF = VARYING_REF       
   AND CONTRACTSTUB.STUB_ID = VARYING_ID;
SET VARYING_ID = SUBSTR(RETURNED_VARCHAR, 3, 6);
SET VARYING_REF= SUBSTR(RETURNED_VARCHAR, 9, 8);
并递归重复,直到
返回的\u VARCHAR
null
(然后我将获得所需的可变\u ID(我没有设计此数据库))

现在,我知道我可以使用游标和while/for循环或递归存储过程来完成这项工作。我只是想确保我这样做没有一点笨拙

SQL多年来已经成熟,我记得oracle中有一些技巧可以深入研究n级关系

有人能给我推荐什么吗?或者我可以继续使用游标之类的东西吗

**编辑--以下是一些示例数据:

合同存根
合同存根编号POL_参考POL_编号 1 qwerty 12345678 2 asdfgh 78945612 3 bnmxcv 45678912 4 dfghjk 14785236

应用程序\u合同存根
贷款部分身份证合同存根身份证 11
2
3
4.4

贷款部分
贷款详细信息贷款部分ID
11
2
3
4.4

政策
合同\u ID贷款\u详情\u ID
00asdfgh78945612 1
00bnmxcv45678912
00dfghjk14785236 3
四,

我无法显示我的图像

注意:POLICY.CONTRACT\u ID是('00',variable\u REF,variable\u ID)的串联-例如00abcdef12345678,其中variable\u REF和variable\u ID表示相关contractsub的父策略。如果该值为空,则不存在“父级”。我想要的是(孤立的)变化的_REF和变化的_ID。(我将返回'00'+可变参考+可变ID)

“dfghjk”和“14785236”的组合将返回自身:00dfghjk14785236

以及合同存根中的所有其他组合(返回00dfghjk14785236)


在那之后我已经筋疲力尽了,希望我没有把事情搞砸。

我昨天刚刚读了一些关于SQL递归的文章。在中(至少在9.5版中)有一整章关于它的内容。

也许您可以提供一些示例数据和期望的结果?是的,DB2可以使用CTE执行递归查询,尽管有一些限制。我不知道你所说的样本数据是什么意思。我认为我在描述上面的输入和输出。输入两个varchar:variang_ID和variang_REF。输出将是从上次返回的POLICY.contractsub_ID解析的variang_ID(contractsub.STUB_ID)和variang_REF(contractsub.REF)。我将研究CTE。示例数据意味着请向我们展示一些行可能包含的内容,以便我们可以看到一些实际数据可能是什么样子。通常,最好在每个输入表中显示足够的行,以演示各种情况和异常。然后根据您向我们显示的输入数据,显示您希望输出的样子。这有助于人们理解问题,并帮助我们验证给定的答案是否正确。袖手旁观。。我要买点东西。谢谢你的耐心。现在添加了一些数据。我无法显示我的图像,所以我只是把它放在里面。