PL / SQL псевдоним / переменная к существующему запросу SQL - PullRequest
0 голосов
/ 24 апреля 2018

Я очень новичок в 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 голосов
/ 25 апреля 2018

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...