Görevim, tablonun toplam sütun sayısını yazdırmaktır. Ardından, belirli bir kimlik için, yalnızca bu değere sahip sütunların adını yazdırın (bir sütunun belirli bir kimlik için null içeriyorsa atlayın). Kodumda FOR LOOP içinde EXECUTE IMMEDIATE
kullanıyorum. EXECUTE IMMEDIATE
bir sütunda veri bulamazsa, işleyebileceğim no_data_exception değerini atar, ancak bu özel durumdan sonra döngüye devam edemiyorum.FOR LOOP ve EXECUTE IMMEDIATE ile özel durum yönetimi
DECLARE
COL_TOTAL_NUM NUMBER;
COL_NAME VARCHAR2(500);
COL_VAL VARCHAR2(500);
BEGIN
SELECT COUNT(*) INTO COL_TOTAL_NUM FROM user_tab_cols WHERE TABLE_NAME='PAY_SLIP_FEB_16';
DBMS_OUTPUT.PUT_LINE('TOTAL COLUMN NUMBER = '||COL_TOTAL_NUM);
FOR A IN 1..COL_TOTAL_NUM LOOP
SAVEPOINT S1;
SELECT COLUMN_NAME INTO COL_NAME FROM user_tab_cols WHERE TABLE_NAME='PAY_SLIP_FEB_16'
AND COLUMN_ID=A;
EXECUTE IMMEDIATE 'SELECT '||COL_NAME||' FROM PAY_SLIP_FEB_16 WHERE EMP_ID=''FMINF83057'' AND '||COL_NAME||' IS NOT NULL' INTO COL_NAME;
DBMS_OUTPUT.PUT_LINE(COL_NAME||' -> '||COL_VAL);
END LOOP;
EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE('ERROR');
ROLLBACK TO SAVEPOINT S1;
END;
Benim çıktısı:
döngüTOTAL COLUMN NUMBER = 117
EMP_ID -> FMINF83057
MONTH -> 2
YEAR -> 2016
NAME -> Mr.Md.Mohiduzzaman
DESIGNATION -> Professor
DEPARTMENT -> Institute of Nutrition and Food Sciences
GRADE -> 2
BASIC_PAY -> 73720
HOUSE_RENT_ALLOWANCE -> 19750
MEDICAL_ALLOWANCE -> 700
ERROR
burada durur. Bu hatadan sonra nasıl devam ederim?
Yani 'HATA' yazdırmak istiyor ve sonra LOOP İÇİN devam etmek ister misiniz? Bu durumda, bunu yapabilirsiniz, ancak döngü, "ROLLBACK" komutuna sahip olduğunuzdan baştan başlayacaktır. – Hawk
Hata yazdırmaya ihtiyacım yok. Özel durumu halledebildiğimden emin olmak için yazdırdım. Sadece onu atla ve döngüye devam etmem gerek. –