============================================== | Kötelezően megoldandó PL/SQL program | ============================================== Az alábbi PL/SQL programot (egy procedúrát) kötelező megírni legkésőbb a második zh-ig, ami a 12. gyakorlaton lesz. A zh-n lesznek papíros és gépes feladatok, az alábbi feladatot a gépes részben fogom értékelni úgy, hogy ez lesz az egyik gépes feladat. A programot senki ne küldje el a zh-ig, azt majd a zh megoldásokkal együtt kell elküldeni, az általam ott megadott paramérekre lefuttatva. ================================================================================== /* Írjunk meg egy PL/SQL procedúrát, amelyik egy gyakoriság szerinti fektetett oszlopdiagrammot ír ki a képernyőre a paraméterül kapott tábla adott oszlopában előforduló értékek előfordulási gyakorisága alapján. A procedúra paramétere egy felhasználónév, egy táblanév és egy oszlopnév (a táblának az egyik oszlopa). A procedúrát dinamikus SQL utasítások használatával kell megírni, de akinek ez nehezen megy, érdemes előtte úgy megírni, hogy egy rögzített táblára és oszlopra működjön. Az oszlopok hosszúságát érdemes az előforduló gyakoriságok alapján arányosan kirajzolni, ha túl nagy gyakoriságok szerepelnek, akkor valamilyen tényezővel elosztani (például a legnagyobb_gyakoriság/50-nel). Az output valami olyasmi legyen, mint ami az alábbi példákban látható. Minimális hibakezelés is legyen a programban, például nem létező táblára vagy oszlopra írja ki ezt. Ha túl sok különböző érték fordul elő az oszlopban (>100), akkor a program írja ki, hogy ez túl sok, és ilyenkor nem kell kirajzolnia az oszlopokat. */ CREATE OR REPLACE PROCEDURE print_histogram( p_owner VARCHAR, p_table VARCHAR, p_col VARCHAR) IS ... Futtassuk le a programot különböző táblákra és oszlopokra, például az alábbiakra: set serveroutput on CALL print_histogram('nikovits','customers','cust_credit_limit'); CALL print_histogram('nikovits','customers','cust_income_level'); CALL print_histogram('nikovits','customers','cust_year_of_birth'); CALL print_histogram('nikovits','employees','department_id'); CALL print_histogram('nikovits','employees','job_id'); Néhány példa output: ==================== CALL print_histogram('nikovits','xxx','xxx'); --------------------------------------------- Non-existing table or column CALL print_histogram('nikovits','hivas','datum'); ------------------------------------------------------- Few or too many distinct values in column CALL print_histogram('nikovits','customers','cust_income_level'); ----------------------------------------------------------------- A: Below 30,000 --> ************* B: 30,000 - 49,999 --> ************** C: 50,000 - 69,999 --> ********************* D: 70,000 - 89,999 --> ************************* E: 90,000 - 109,999 --> ************************************** F: 110,000 - 129,999 --> *************************************************** G: 130,000 - 149,999 --> ************************** H: 150,000 - 169,999 --> ************************** I: 170,000 - 189,999 --> ********************** J: 190,000 - 249,999 --> *************** K: 250,000 - 299,999 --> ********** L: 300,000 and above --> ******** CALL print_histogram('nikovits','customers','cust_year_of_birth'); ------------------------------------------------------------------ 1913 --> * 1917 --> ** 1918 --> ** 1919 --> ** 1920 --> ** 1921 --> *** 1922 --> *** 1923 --> **** 1924 --> *** 1925 --> ***** 1926 --> ****** 1927 --> ***** 1928 --> ******* 1929 --> ******** 1930 --> ******** 1931 --> ********** 1932 --> ********** 1933 --> *********** 1934 --> ************** 1935 --> ************** 1936 --> ************** 1937 --> ********************* 1938 --> ******************** 1939 --> ********************** 1940 --> *************************** 1941 --> **************************** 1942 --> **************************** 1943 --> ************************************* 1944 --> ************************************* 1945 --> ******************************************** 1946 --> ********************************************** 1947 --> *********************************************** 1948 --> ********************************************** 1949 --> *************************************************** 1950 --> ****************************************** 1951 --> ******************************************** 1952 --> ******************************************** 1953 --> **************************************** 1954 --> ************************************** 1955 --> **************************************** 1956 --> ************************************ 1957 --> ************************************ 1958 --> *********************************** 1959 --> ********************************* 1960 --> ******************************** 1961 --> ******************************** 1962 --> ******************************* 1963 --> ****************************** 1964 --> ****************************** 1965 --> ***************************** 1966 --> ***************************** 1967 --> ***************************** 1968 --> ***************************** 1969 --> ***************************** 1970 --> **************************** 1971 --> **************************** 1972 --> **************************** 1973 --> **************************** 1974 --> **************************** 1975 --> ***************************** 1976 --> **************************** 1977 --> **************************** 1978 --> ***************************** 1979 --> **************************** 1980 --> *************************** 1981 --> ************************** 1982 --> *********************** 1983 --> ********************** 1984 --> ****************** 1985 --> ************ 1986 --> ********* 1987 --> ***** 1988 --> *** 1989 --> ** 1990 --> * alter session set nls_date_format='yyyy.mm.dd'; CALL print_histogram('nikovits','szallit','datum'); ------------------------------------------------------------ 2003.01.01 --> *********************************************** 2003.01.05 --> *********************************************** 2003.01.09 --> ************************************************* 2003.01.13 --> *************************************** 2003.01.17 --> ************************************* 2003.01.21 --> ******************************************** 2003.01.25 --> ************************************************* 2003.02.02 --> ***************************** 2003.02.06 --> *************************** 2003.02.10 --> *********************** 2003.02.14 --> ************************** 2003.02.18 --> *************************** 2003.02.22 --> ****************************** 2003.02.26 --> *********************** 2003.02.28 --> * 2003.03.03 --> ******************************************** 2003.03.07 --> **************************************** 2003.03.11 --> ************************************* 2003.03.15 --> ******************************************* 2003.03.19 --> *********************************** 2003.03.23 --> **************************************** 2003.03.27 --> ************************************* 2003.04.04 --> ***************************** 2003.04.08 --> ********************************* 2003.04.12 --> ************************** 2003.04.16 --> **************************** 2003.04.20 --> ******************************** 2003.04.24 --> ***************************** 2003.04.28 --> ******************************* 2003.05.01 --> ******************************************** 2003.05.03 --> * 2003.05.05 --> ***************************************** 2003.05.07 --> * 2003.05.09 --> *************************************************** 2003.05.13 --> ********************************************** 2003.05.17 --> *************************************** 2003.05.21 --> *************************************** 2003.05.25 --> ************************************** 2003.06.02 --> ************************* 2003.06.06 --> ****************************** 2003.06.10 --> ************************ 2003.06.14 --> **************************** 2003.06.18 --> ************************** 2003.06.22 --> ***************************** 2003.06.26 --> **************************** 2003.07.03 --> ******************************************** 2003.07.07 --> ******************************************* 2003.07.11 --> **************************************** 2003.07.15 --> ************************************************** 2003.07.19 --> ************************************************** 2003.07.23 --> ***************************************** 2003.07.27 --> ******************************************** 2003.08.04 --> *************************** 2003.08.08 --> *************************** 2003.08.12 --> **************************** 2003.08.16 --> ************************* 2003.08.20 --> **************************** 2003.08.24 --> ****************************** 2003.08.28 --> ************************** 2003.09.01 --> ****************************************** 2003.09.05 --> ************************************* 2003.09.09 --> **************************************** 2003.09.13 --> ************************************ 2003.09.17 --> ************************************ 2003.09.21 --> ****************************************** 2003.09.25 --> *************************************** 2003.10.02 --> ******************************** 2003.10.06 --> ***************************** 2003.10.10 --> ********************************** 2003.10.14 --> ******************************* 2003.10.18 --> ************************** 2003.10.22 --> ******************************** 2003.10.26 --> ********************* 2003.11.03 --> ****************************************** 2003.11.07 --> *************************************** 2003.11.11 --> *************************************** 2003.11.15 --> *************************************** 2003.11.19 --> ****************************************** 2003.11.23 --> ************************************** 2003.11.27 --> ************************************* 2003.12.04 --> *********************** 2003.12.08 --> *************************** 2003.12.12 --> ***************************** 2003.12.16 --> ************************* 2003.12.20 --> **************************** 2003.12.24 --> ************************** 2003.12.28 --> ***********************