PL / SQL别名/变量到现有SQL查询

时间:2018-04-24 19:57:06

标签: oracle plsql

我是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;
/

我不确定这是否是正确的语法,但我希望这个想法能够理解我的要求。

谢谢!

1 个答案:

答案 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;