Уменьшите оператор oracle PL / SQL - PullRequest
0 голосов
/ 14 февраля 2020

Я новый в PL / SQL. После нескольких часов обучения у меня возникли некоторые любопытные вопросы. Пример У меня есть оператор SQL, подобный следующему:

SELECT ShipperName, OrderID, NumberOfOrders, ... 
FROM Orders

Можем ли мы объявить переменную, которая содержит «список выбора», как list_select = 'ShipperName, OrderID, NumberOfOrders, ... ' И затем заменить оператор выбора на «список выбора», которым мы были объявили?

SELECT list_select 
FROM Orders

И другой вопрос, можем ли мы уменьшить выражение SQL, например, Image (image). Я попробовал это в Oracle SQL Разработчике, с компилятором все в порядке, но когда я запустил тест, я получил ошибку «по сегментам».

Любая помощь приветствуется и благодарю за помощь.

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

По вашему второму вопросу: вы не хотите здесь присоединяться, потому что вы выбираете только из таблицы1. Вы скорее хотите [NOT] EXISTS или [NOT] IN. Например:

SELECT orderid, clientid
FROM orders o
WHERE EXISTS -- We are looking for orders containing expensive items
(
  SELECT null 
  FROM orderposition op
  WHERE op.orderid = o.orderid
  AND op.price > 1000
)
AND -- and the client ...
(
  NOT EXISTS -- ... must have paid all their invoices (there exists no unpaid invoice)
  (
    SELECT null 
    FROM invoices i
    WHERE i.clientid = o.clientid
    AND i.paid_date IS NULL
  )
  OR clientid IN -- ... or be known as reliable client (they are in the set of reliable ones)
  (
    SELECT c.clientid
    FROM clients c
    WHERE c.reliable = 'YES'
  )
);
1 голос
/ 14 февраля 2020

По первому вопросу вы можете выполнить поиск оператора «EXECUTE IMMEDIATE», который используется для выполнения динамического c запроса. Поэтому вы можете попробовать что-то вроде ниже -

EXECUTE IMMEDIATE 'SELECT ' || YOUR_COMMA_DELIMITED_COLUMNS_LIST || ' FROM Orders';

Для 2-го, пожалуйста, опубликуйте пример данных и ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...