Silny kursor referencyjny ze zdefiniowanym przez użytkownika typem danych rekordu
W poprzednim samouczku dowiedzieliśmy się, jak utworzyć silny kursor odniesienia PL/SQL przy użyciu zmiennej typu danych rekordu opartej na tabeli. Zademonstrowałem tam użycie silnego kursora ref do obsługi danych ze wszystkich kolumn tabeli pracowników. W związku z tym budzi to niepokój. A co jeśli chcemy mieć dane z jakiejś konkretnej kolumny tabeli? Właśnie tym zajmiemy się w dzisiejszym samouczku.
Jednak przed przejściem do dalszej części tego samouczka sugeruję zapoznanie się ze znajomością kursorów referencyjnych PL/SQL. W szczególności Silny Kursor Odniesienia i Typ Danych Rekordów Zdefiniowanych przez Użytkownika. Ponadto dla Twojej wygody udostępniam tutaj wszystkie niezbędne linki:
- Jak utworzyć silny kursor referencyjny za pomocą rekordu opartego na tabeli
- Co to są typy danych rekordów zdefiniowane przez użytkownika?
W poprzednim samouczku pomyślnie pokazano, w jaki sposób kursor PL/SQL Strong ref pobierał i obsługiwał dane ze wszystkich kolumn wiersza. Ale co, jeśli chcemy mieć dane z określonej kolumny wiersza? Powiedzmy, że chcemy tylko zobaczyć e-mail lub wynagrodzenie pracownika. W związku z tym nie chcemy wydawać kosztownych zasobów na odzyskiwanie wszystkich niepotrzebnych informacji. Czy możemy użyć do tego tego samego kursora ref? Dowiedzmy się.
Czy możemy użyć kursora silnego odwołania, który utworzyliśmy w poprzednim samouczku, aby pobrać dane z określonej kolumny?
Odpowiedź na to pytanie brzmi Nie, nie możemy .
Ponieważ ten silny kursor odniesienia został utworzony przy użyciu typu danych rekordu opartego na tabeli. Aby zilustrować, kiedy tworzymy typ danych rekordu oparty na tabeli, silnik Oracle tworzy złożoną strukturę danych. Ta struktura jest pełna pól odpowiadających każdej kolumnie określonej tabeli.
Co więcej, wszystkie te pola są automatycznie przypisywane do tej samej nazwy i tego samego typu danych, co kolumny tabeli podstawowej. Ale jeśli chodzi o inicjowanie rekordu przy użyciu określonej kolumny, musimy wykonać całą tę pracę ręcznie.
Aby lepiej to zrozumieć, zapoznaj się z samouczkiem 34 PL/SQL. Omówiłem tam szczegółowo, jak zainicjować typ danych rekordu i jego działanie.
Jakie jest więc rozwiązanie tego problemu?
Możemy łatwo rozwiązać ten problem. Możemy utworzyć silny kursor odniesienia PL/SQL ze zmienną typu danych rekordu zdefiniowanego przez użytkownika.
Przykład:silny kursor odniesienia PL/SQL ze zmienną typu danych rekordu zdefiniowaną przez użytkownika.
Na przykład, chcemy stworzyć silny kursor ref za pomocą instrukcji SELECT. Co zwraca tylko wynagrodzenie pracownika, którego identyfikator pracownika wynosi 100.
SET SERVEROUTPUT ON; DECLARE --Create User-Defined Record Datatype TYPE my_rec IS RECORD ( emp_sal employees.salary%TYPE ); --Declare Strong Ref Cursor TYPE RefCur IS REF CURSOR RETURN my_rec; cur_var REFCUR; --Another anchored datatype variable for holding data at_var employees.salary%TYPE; BEGIN OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100; FETCH cur_var INTO at_var; CLOSE cur_var; DBMS_OUTPUT.PUT_LINE ('Salary of the employee is '||at_var); END; /
Więc złammy ten kod i zobaczmy, co się tutaj dzieje.
Sekcja deklaracji
DECLARE TYPE my_rec IS RECORD ( emp_sal employees.salary%TYPE ); TYPE RefCur IS REF CURSOR RETURN my_rec; cur_var REFCUR; at_var employees.salary%TYPE;
Oto nasza sekcja deklaracji. W pierwszych trzech wierszach tej sekcji utworzyliśmy nasz zdefiniowany przez użytkownika typ danych rekordu o nazwie my_rec. Co więcej, ten zdefiniowany przez użytkownika typ danych rekordu ma tylko jedno pole, którym jest emp_sal. Emp_sal to zakotwiczone pole typu danych, które jest zaprojektowane nad kolumną wynagrodzeń w tabeli pracowników. Ponieważ emp_sal ma zakotwiczony typ danych, automatycznie zostanie mu przypisany typ danych i szerokość danych w kolumnie bazowej, którą w tym przypadku jest wynagrodzenie.
Zaraz potem zadeklarowaliśmy nasz Silny Kursor Odniesienia PL/SQL o nazwie „RefCur”. Zwracany typ tego silnego kursora referencyjnego to „my_rec” . Po deklaracji kursora stworzyliśmy zmienną kursora o nazwie cur_var. Dodatkowo ta zmienna jest używana do odwoływania się do silnego kursora ref znajdującego się na początku kodu.
Oprócz zmiennej kursora mamy w tej sekcji zadeklarowaną jeszcze inną zmienną. Ta zmienna to „at_var”, to znowu zakotwiczona zmienna typu danych. Służy do przechowywania danych zwracanych przez kursor.
Przejdźmy teraz do sekcji egzekucji.
Sekcja wykonania
BEGIN OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100; FETCH cur_var INTO at_var; CLOSE cur_var; DBMS_OUTPUT.PUT_LINE('Salary of the employee is '||at_var); END; /
Ta sekcja wykonania ma cztery wykonywalne wiersze kodów. Zobaczmy, co to jest.
Wiersz 1:Otwarcie wyciągu
Ta instrukcja dynamicznie Otwiera wspomniany kursor. Następnie dołącza instrukcję SELECT określoną zaraz po słowie kluczowym FOR.
W naszym przypadku ta instrukcja otwiera silny kursor ref za pomocą zmiennej kursora „cur_var” – instrukcja SELECT. Co zwraca dane tylko z „kolumny wynagrodzeń” tabeli pracowników.
Wiersz 2:wyciąg z instrukcji pobierania
Ta instrukcja pobierze dane z kursora ref i zapisze je w zmiennej „at_var”. Równie ważne jest upewnienie się, że typ danych pobieranych danych i zmiennej, w której dane są przechowywane, muszą być zgodne. W przeciwnym razie wystąpi błąd.
Wiersz 3:Zamknij oświadczenie
Trzecia linia to instrukcja close. Zamykanie kursora po zakończeniu to dobra praktyka.
Wiersz 4:Oświadczenie wyjściowe
Wreszcie ostatnią instrukcją sekcji wykonania jest instrukcja DBMS_OUTPUT. I wyświetla wynagrodzenie pracownika z powrotem użytkownikowi.
Te cztery wiersze uzupełniają sekcję wykonania tego bloku PL/SQL. Ponadto pomyślne wykonanie tego kodu powinno pokazać wynagrodzenie ze sformatowanym ciągiem.
Czy jesteś jednym z tych, którzy uczą się lepiej oglądając wideo? Oto samouczek wideo na temat silnego kursora referencyjnego ze zdefiniowanym przez użytkownika typem danych rekordu.
To wszystko w tym samouczku. Udostępnij ten blog w swoich mediach społecznościowych i pomóż innym w nauce. Możesz zasubskrybować kanał YouTube, aby uzyskać więcej interesujących samouczków. Dzięki i życzę miłego dnia!