我在寻找什么?
创建存储过程以将结果写入表中,或者最坏的情况是简化此查询。
查询
SELECT CONCAT(ba.BRANCH_NUMBER,ba.CLIENT_ID) AS BANK_ACCOUNT_NUMBER,
bp.ORIGINAL_REGISTERED_ID,
bap.ANOTHER_COLUMN_1,
bap.ANOTHER_COLUMN_2,
bap.ANOTHER_COLUMN_3,
bap.ANOTHER_COLUMN_4,
bd.ANOTHER_COLUMN_1,
bd.REGISTERED_ID
FROM BANK_ACCOUNT_PARTNER bap,
BANK_PARTNER bp,
BANK_ACCOUNT ba,
BANKING_DATA bd
WHERE bap.PARTNER_ID=bp.PARTNER_ID
AND bap.ACCOUNT_ID=ba.ACCOUNT_ID
AND ba.REGISTERED_ID=bd.REGISTERED_ID
AND bap.ACCOUNT_ID IN
(SELECT ACCOUNT_ID FROM(SELECT ba.ACCOUNT_ID,
ROW_NUMBER() OVER (PARTITION BY ba.BRANCH_NUMBER, ba.CLIENT_ID ORDER BY bd.ACCOUNT_OPENED_DATE DESC) ROW_NUMBER
FROM BANK_ACCOUNT ba,
BANKING_DATA bd,
ANOTHER_TABLE at
WHERE da.REGISTERED_ID = bd.REGISTERED_ID
AND at.REGISTERED_ID=bd.REGISTERED_ID
AND ANOTHER_CRITERIA_COLUMN = 'someValue'
AND ANOTHER_CRITERIA_COLUMN IN ('someValue1','someValue2','someValue3')
AND ba.ANOTHER_CRITERIA_COLUMN='someValue'
AND ba.ACCOUNT_MATURITY_DATE IS NULL) WHERE ROW_NUMBER='1');
提前致谢。
答案 0 :(得分:0)
您可以使用CURSOR
或简单SELECT INTO
检索查询结果,以便进行标量查询,如下所示:
CREATE PROCEDURE myProcedure IS
BANK_ACCOUNT_NUMBER VARCHAR(30);
ORIGINAL_REGISTERED_ID BANK_PARTNER.ORIGINAL_REGISTERED_ID%TYPE;
ANOTHER_COLUMN_BAP1 BANK_ACCOUNT_PARTNER.ANOTHER_COLUMN_1%TYPE;
ANOTHER_COLUMN_2 BANK_ACCOUNT_PARTNER.ANOTHER_COLUMN_2%TYPE;
ANOTHER_COLUMN_3 BANK_ACCOUNT_PARTNER.ANOTHER_COLUMN_3%TYPE;
ANOTHER_COLUMN_4 BANK_ACCOUNT_PARTNER.ANOTHER_COLUMN_4%TYPE;
ANOTHER_COLUMN_BD1 BANKING_DATA.ANOTHER_COLUMN_1%TYPE;
REGISTERED_ID BANKING_DATA.REGISTERED_ID%TYPE;
BEGIN
SELECT CONCAT(ba.BRANCH_NUMBER,ba.CLIENT_ID) AS BANK_ACCOUNT_NUMBER,
bp.ORIGINAL_REGISTERED_ID,
bap.ANOTHER_COLUMN_1,
bap.ANOTHER_COLUMN_2,
bap.ANOTHER_COLUMN_3,
bap.ANOTHER_COLUMN_4,
bd.ANOTHER_COLUMN_1,
bd.REGISTERED_ID INTO BANK_ACCOUNT_NUMBER, ORIGINAL_REGISTERED_ID, ANOTHER_COLUMN_BAP1, ANOTHER_COLUMN_2, ANOTHER_COLUMN_3, ANOTHER_COLUMN_4, ANOTHER_COLUMN_BD1, REGISTERED_ID
FROM BANK_ACCOUNT_PARTNER bap,
BANK_PARTNER bp,
BANK_ACCOUNT ba,
BANKING_DATA bd
WHERE bap.PARTNER_ID=bp.PARTNER_ID
AND bap.ACCOUNT_ID=ba.ACCOUNT_ID
AND ba.REGISTERED_ID=bd.REGISTERED_ID
AND bap.ACCOUNT_ID IN
(SELECT ACCOUNT_ID FROM(SELECT ba.ACCOUNT_ID,
ROW_NUMBER() OVER (PARTITION BY ba.BRANCH_NUMBER, ba.CLIENT_ID ORDER BY bd.ACCOUNT_OPENED_DATE DESC) ROW_NUMBER
FROM BANK_ACCOUNT ba,
BANKING_DATA bd,
ANOTHER_TABLE at
WHERE da.REGISTERED_ID = bd.REGISTERED_ID
AND at.REGISTERED_ID=bd.REGISTERED_ID
AND ANOTHER_CRITERIA_COLUMN = 'someValue'
AND ANOTHER_CRITERIA_COLUMN IN ('someValue1','someValue2','someValue3')
AND ba.ANOTHER_CRITERIA_COLUMN='someValue'
AND ba.ACCOUNT_MATURITY_DATE IS NULL) WHERE ROW_NUMBER='1');
INSERT INTO myTable VALUES(BANK_ACCOUNT_NUMBER, ORIGINAL_REGISTERED_ID, ANOTHER_COLUMN_BAP1, ANOTHER_COLUMN_2, ANOTHER_COLUMN_3, ANOTHER_COLUMN_4, ANOTHER_COLUMN_BD1, REGISTERED_ID);
END;
/
或使用CURSOR
循环:
CREATE PROCEDURE myProcedure IS
CURSOR query IS
SELECT CONCAT(ba.BRANCH_NUMBER,ba.CLIENT_ID) AS BANK_ACCOUNT_NUMBER,
bp.ORIGINAL_REGISTERED_ID,
bap.ANOTHER_COLUMN_1 AS ANOTHER_COLUMN_BAP1,
bap.ANOTHER_COLUMN_2,
bap.ANOTHER_COLUMN_3,
bap.ANOTHER_COLUMN_4,
bd.ANOTHER_COLUMN_1 AS ANOTHER_COLUMN_BD1,
bd.REGISTERED_ID
FROM BANK_ACCOUNT_PARTNER bap,
BANK_PARTNER bp,
BANK_ACCOUNT ba,
BANKING_DATA bd
WHERE bap.PARTNER_ID=bp.PARTNER_ID
AND bap.ACCOUNT_ID=ba.ACCOUNT_ID
AND ba.REGISTERED_ID=bd.REGISTERED_ID
AND bap.ACCOUNT_ID IN
(SELECT ACCOUNT_ID FROM(SELECT ba.ACCOUNT_ID,
ROW_NUMBER() OVER (PARTITION BY ba.BRANCH_NUMBER, ba.CLIENT_ID ORDER BY bd.ACCOUNT_OPENED_DATE DESC) ROW_NUMBER
FROM BANK_ACCOUNT ba,
BANKING_DATA bd,
ANOTHER_TABLE at
WHERE da.REGISTERED_ID = bd.REGISTERED_ID
AND at.REGISTERED_ID=bd.REGISTERED_ID
AND ANOTHER_CRITERIA_COLUMN = 'someValue'
AND ANOTHER_CRITERIA_COLUMN IN ('someValue1','someValue2','someValue3')
AND ba.ANOTHER_CRITERIA_COLUMN='someValue'
AND ba.ACCOUNT_MATURITY_DATE IS NULL) WHERE ROW_NUMBER='1');
BEGIN
FOR line IN query LOOP
INSERT INTO myTable VALUES(line.BANK_ACCOUNT_NUMBER, line.ORIGINAL_REGISTERED_ID, line.ANOTHER_COLUMN_BAP1, line.ANOTHER_COLUMN_2, line.ANOTHER_COLUMN_3, line.ANOTHER_COLUMN_4, line.ANOTHER_COLUMN_BD1, line.REGISTERED_ID);
END LOOP;
END;
/