我是PL / SQL的新手,希望能够利用oracle SQL的过程选项。
我有一个查询,我想转换成PL / SQL查询,只要你的查询中有单词SKU,它就会获取你想要的SKU和输入。
示例:
SELECT A.*, CT.CUSTOMER_ID, CT.ORDERS
FROM CUSTOMER_TABLE CT
RIGHT JOIN
(
SELECT OT.COLUMN_ID, OT.SKU, OT.ORDERS
FROM ORDERS_TABLE OT
WHERE OT.SKU = 123
)A
ON CT.ORDERS = OT.ORDERS
AND CT.SKU IS > 0
这是一个严格的例子,所以我知道我所要求的是没有意义的,但是,如果我有一个包含2或3个“SKU”输入的更长的查询,那么我想为它提供一个变量/参数。
我理想的代码是:
DECLARE
SKUS INTEGER := 123;
BEGIN
SELECT A.*, CT.CUSTOMER_ID
FROM CUSTOMER_TABLE CT
RIGHT JOIN
(
SELECT OT.COLUMN_ID, OT.SKU, OT.ORDERS
FROM ORDERS_TABLE OT
WHERE @SKUS
)A
ON CT.ORDERS = OT.ORDERS
AND @SKUS IS > 0
END;
/
我不确定这是否是正确的语法,但我希望这个想法能够理解我的要求。
谢谢!
答案 0 :(得分:2)
PL / SQL非常容易处理这种情况。保持您的SQL语句完全相同,并用您的变量或甚至游标参数替换文字。我将SELECT移动到显式游标中,以显示如何根据游标轻松声明记录:
DECLARE
c_sku CONSTANT INTEGER := 123;
CURSOR my_cur (sku_in IN INTEGER)
IS
SELECT a.*, ct.customer_id, ct.orders
FROM customer_table ct
RIGHT JOIN (SELECT ot.column_id, ot.sku, ot.orders
FROM orders_table ot
WHERE ot.sku = sku_in) a
ON ct.orders = ot.orders AND sku_in > 0;
l_info my_cur%ROWTYPE;
BEGIN
OPEN my_cur (c_sku);
FETCH my_cur INTO l_info;
CLOSE my_cur;
END;