Kursory/Wyjątki - problem

Kursory/Wyjątki - problem
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

W takim razie drugim najłatwiejszym rozwiązaniem jest wykorzystanie flagi:
https://stackoverflow.com/questions/10814111/how-to-check-if-cursor-returns-any-records-in-oracle (pierwsza odpowiedź)

YA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2384
0

Otwierasz kursor, ale w zasadzie nic na nim nie robisz. Brakuje Ci FETCH z kursora (pobrania danych z kursora...).

Kopiuj
FETCH krusor INTO zmienne;

https://www.techonthenet.com/oracle/cursors/fetch.php

J5
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 28
0
Kopiuj
DECLARE
    V_STANOWISKO EMPLOYEES.JOB_ID%TYPE:=UPPER('&NAZWA_STANOWISKA');
    IS_FOUND_REC BOOLEAN:= FALSE;
CURSOR ZADANIE2 IS
    SELECT LAST_NAME FROM EMPLOYEES
                    WHERE JOB_ID = V_STANOWISKO;
BEGIN
        
            DBMS_OUTPUT.PUT_LINE('Pracownicy na stanowisku: ' || v_stanowisko);
        FOR V_STANOWISKO IN ZADANIE2 LOOP
        IS_FOUND_REC:=TRUE;
            DBMS_OUTPUT.PUT_LINE(V_STANOWISKO.LAST_NAME );    
        END LOOP;
        IF NOT IS_FOUND_REC THEN
            raise_application_error(-20001,'Nie istnieje stanowisko o takiej nazwie');
        END IF;
END;
Kopiuj
Error report -
ORA-20001: Nie istnieje stanowisko o takiej nazwie
ORA-06512: przy linia 15

z flagą naprawdę pomogło i działa ale chciałbym się dowiedzieć czy w tym kodzie poprzednim mogę zastosować fetch nie naruszając pętli for????

Kopiuj
DECLARE
    V_STANOWISKO EMPLOYEES.JOB_ID%TYPE:=UPPER('&NAZWA_STANOWISKA');
CURSOR ZADANIE2 IS
    SELECT LAST_NAME FROM EMPLOYEES
                    WHERE JOB_ID = V_STANOWISKO;
BEGIN
    OPEN ZADANIE2;
    IF ZADANIE2%NOTFOUND THEN
        raise_application_error(-20001,'Nie istnieje stanowisko o takiej nazwie');
    END IF; 
            DBMS_OUTPUT.PUT_LINE('Pracownicy na stanowisku: ' || v_stanowisko);
    CLOSE ZADANIE2;
        FOR V_STANOWISKO IN ZADANIE2 LOOP
            DBMS_OUTPUT.PUT_LINE(V_STANOWISKO.LAST_NAME ); 
           
        END LOOP;
END;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.