Вам, вероятно, лучше вообще не использовать вкладки, а вместо этого делать:
dbms_output.put_line(rpad('Product Name', 51)||'Demand Status');
dbms_output.put_line(rpad('------------', 51)||'-------------');
...
dbms_output.put_line(rpad(PRODUCT_ROW.PRODUCT_NAME, 51)||STATUS);
, где 51 обозначает максимальное название продукта, которое вы на самом деле ожидаете, которое я угадал на 50 произвольно, плюс один для пробела.
Если вы хотите, чтобы столбец с названием продукта полностью подчеркивался, вы можете сделать:
dbms_output.put_line(rpad('Product Name', 51)||'Demand Status');
dbms_output.put_line(rpad('-', 50, '-')||' '||'-------------');
...
dbms_output.put_line(rpad(PRODUCT_ROW.PRODUCT_NAME, 51)||STATUS);
Использование dbms_output
для всего, кроме отладки, может позже вызвать головную боль, так что это может лучше просто вернуть product_cursor
клиенту и позволить этому отобразить его; что-то вроде (при условии SQL* Plus или аналогичное):
var rc refcursor
declare
product_row product_cursor%rowtype;
begin
UPDATE PRODUCT
SET PRICE = PRICE - 0
WHERE
(SELECT COALESCE(MIN(ORDER_ID), 0)
FROM ORDER_DETAILS
WHERE ORDER_DETAILS.PRODUCT_ID = PRODUCT.PRODUCT_ID) =
(SELECT COALESCE(MAX(ORDER_ID), 0)
FROM ORDER_DETAILS
WHERE ORDER_DETAILS.PRODUCT_ID = PRODUCT.PRODUCT_ID);
open :rc for (
SELECT PRODUCT_NAME,
CASE WHEN COUNT(*) < 2 THEN 'Low Demand' ELSE 'High Demand' END AS STATUS
FROM PRODUCT FULL JOIN ORDER_DETAILS
ON PRODUCT.PRODUCT_ID = ORDER_DETAILS.PRODUCT_ID
GROUP BY PRODUCT_NAME;
end;
/
print rc
Не очевидно, почему вы здесь используете PL / SQL вообще; Вы можете просто использовать два SQL оператора:
UPDATE PRODUCT
SET PRICE = PRICE - 0
WHERE
(SELECT COALESCE(MIN(ORDER_ID), 0)
FROM ORDER_DETAILS
WHERE ORDER_DETAILS.PRODUCT_ID = PRODUCT.PRODUCT_ID) =
(SELECT COALESCE(MAX(ORDER_ID), 0)
FROM ORDER_DETAILS
WHERE ORDER_DETAILS.PRODUCT_ID = PRODUCT.PRODUCT_ID);
SELECT PRODUCT_NAME,
CASE WHEN COUNT(*) < 2 THEN 'Low Demand' ELSE 'High Demand' END AS STATUS
FROM PRODUCT FULL JOIN ORDER_DETAILS
ON PRODUCT.PRODUCT_ID = ORDER_DETAILS.PRODUCT_ID
GROUP BY PRODUCT_NAME;