将多表SQL查询格式化为PL / SQL

时间:2019-02-22 18:19:50

标签: sql oracle plsql

我有一个多表SQL查询(如下),该查询可用于获取所需的答案,但是我需要将同一查询编码为匿名PL / SQL块。我尝试了多种方法,但是没有得到类似的有效输出。谁能告诉我您将如何处理(或仅提供一些有关如何最好地进行操作的指示)?谢谢!

SELECT * FROM
(SELECT zip, count(purchase) as total_sales_in_zip
FROM sales s 
  JOIN items i 
    ON s.sale_id = i.sale_id  
  JOIN customers c 
    ON s.cust_id = c.cust_id
GROUP BY zip
ORDER BY total_sales_in_zip DESC)
WHERE ROWNUM <= 1;

输出结果是:

ZIP     TOTAL_SALES_IN_ZIP                                                             
-----   -------------------
48864                    38

1 个答案:

答案 0 :(得分:2)

尽管您的查询看起来毫无意义。它是一个简单的联接查询,没有任何限制,并且可以使用额外的复杂过滤器。如果仅在presql上添加BEGIN,在postsql上添加END,则它将是有效的匿名Pl / sql块。

 DECLARE
    v_zip Sales.zip%TYPE :=&v_zip;
    v_total_sales_in_zip varchar2(200);
 BEGIN

    SELECT v_zip, count(purchase) 
        as 
       total_sales_in_zip  into 
        v_total_sales_in_zip
      FROM sales s 
      JOIN items i 
       ON s.sale_id = i.sale_id  
     JOIN customers c 
      ON s.cust_id = c.cust_id 
       GROUP BY v_zip
      ORDER BY total_sales_in_zip DESC)
      WHERE ROWNUM <= 1;

    dbms_output.putline("ZIP CODE"|| v_zip  ||"Total Sales in Zip : "|| v_total_sales_in_zip);
 END;