Advertisement
Smudla

CV7_DOMACI

Dec 2nd, 2015
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.85 KB | None | 0 0
  1. CREATE TABLE pomocna
  2. (table_name VARCHAR2(255),
  3. pocetRadku NUMBER);
  4.  
  5. CREATE OR REPLACE PROCEDURE CV8_POCET_RADKU(p_schema VARCHAR2, p_razeni IN VARCHAR2 DEFAULT 'ASC') AS
  6.   muj_cursor sys_refcursor;
  7.   i_pocet_radku NUMBER;
  8.   i_nazev_tabulky VARCHAR2(30);
  9. BEGIN
  10.   DELETE FROM pomocna;
  11.   FOR X IN (SELECT table_name FROM all_tables WHERE LOWER(owner) = LOWER(p_schema))
  12.     LOOP
  13.       EXECUTE IMMEDIATE 'Select count(*) from ' || p_schema || '.' || x.table_name INTO i_pocet_radku;
  14.       INSERT INTO pomocna VALUES(x.table_name, i_pocet_radku);
  15.     END LOOP;
  16.     DBMS_OUTPUT.PUT_LINE('Tabulky ze schematu' || p_schema || ';');
  17.   OPEN muj_cursor FOR 'Select table_name, pocetRadku  from pomocna order by pocetRadku  ' || p_razeni;
  18.     LOOP
  19.       FETCH muj_cursor INTO i_nazev_tabulky, i_pocet_radku;
  20.       EXIT WHEN muj_cursor%notFound;
  21.       DBMS_OUTPUT.PUT_LINE( i_nazev_tabulky ||' - ' || i_pocet_radku || ' radku');
  22.     END LOOP;
  23.     CLOSE muj_cursor;
  24. END CV8_POCET_RADKU;
  25.  
  26. CREATE OR REPLACE  VIEW CV8_PRODUCTS_VS_REGIONS
  27. ("PROD_NAME", "OCEANIA_CENA", "MIDDLEEAST_CENA", "EUROPE_CENA", "AFRICA_CENA", "ASIA_CENA", "AMERICAS_CENA")
  28. AS
  29. SELECT "PROD_NAME","OCEANIA_CENA","MIDDLEEAST_CENA","EUROPE_CENA","AFRICA_CENA","ASIA_CENA","AMERICAS_CENA"
  30. FROM(
  31. SELECT prod_name, amount_sold, country_region FROM sh.products
  32. join sh.sales using(prod_id)
  33. join sh.times using(time_id)
  34. join sh.customers using(cust_id)
  35. join sh.countries using(country_id)
  36. join sh.channels using(channel_id)
  37. WHERE calendar_year = 2001 AND channel_desc LIKE 'Direct Sales'
  38. ORDER BY prod_name
  39. )
  40. Pivot
  41. (SUM(amount_sold) AS cena FOR country_region
  42. IN
  43. (
  44. 'Oceania' AS Oceania,
  45. 'Middle East' AS MiddleEast,
  46. 'Europe' AS Europe,
  47. 'Africa' AS Africa,
  48. 'Asia' AS Asia,
  49. 'Americas' AS Americas));
  50.  
  51. CREATE OR REPLACE VIEW CV8_CREDIT_LIMIT_STATS
  52. ("MIN_LOW_CREDIT", "AVG_LOW_CREDIT", "MAX_LOW_CREDIT", "MIN_MAX_CREDIT", "AVG_MAX_CREDIT", "MAX_MAX_CREDIT")
  53.   AS
  54.   SELECT
  55.   ROUND(AVG(sold) keep (DENSE_RANK LAST ORDER BY cust_credit_limit ), 2) AS avg_max_credit,
  56.   ROUND(MAX(sold) keep (DENSE_RANK LAST ORDER BY cust_credit_limit ), 2) AS max_max_credit,
  57.   ROUND(MIN(sold) keep (DENSE_RANK FIRST ORDER BY cust_credit_limit ), 2) AS min_low_credit,
  58.   ROUND(AVG(sold) keep (DENSE_RANK FIRST ORDER BY cust_credit_limit ), 2) AS avg_low_credit,
  59.   ROUND(MAX(sold) keep (DENSE_RANK FIRST ORDER BY cust_credit_limit ), 2) AS max_low_credit,
  60.   ROUND(MIN(sold) keep (DENSE_RANK LAST ORDER BY cust_credit_limit ), 2) AS min_max_credit
  61. FROM(
  62. SELECT
  63. cust_last_name, SUM(AMOUNT_SOLD)
  64. AS
  65. sold, cust_credit_limit
  66. FROM sh.products
  67. join sh.sales using(prod_id)
  68. join sh.times using(time_id)
  69. join sh.customers using(cust_id)
  70. join sh.countries using(country_id)
  71. join sh.channels using(channel_id)
  72. WHERE calendar_year BETWEEN 2000 AND 2002
  73. GROUP BY cust_last_name,
  74. cust_credit_limit
  75. ORDER BY cust_credit_limit ASC);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement