Nie możesz utworzyć %ROWTYPE
zmienna dla nieznanej tabeli i nie możesz statycznie odwoływać się do nazw kolumn, jeśli nie znasz nazwy tabeli w czasie kompilacji.
Możesz użyć pakietu dbms_sql do obsługi całkowicie dynamicznych instrukcji SQL. Musisz przygotować instrukcję SQL, opisać kolumny, aby poznać liczbę kolumn i ich typy danych, powiązać odpowiednie zmienne, a następnie pobrać dane. Jest to znacznie bardziej kłopotliwy sposób pisania kodu niż przykład, który zamieściłeś, ale zapewnia niezwykłą elastyczność.
W dokumentacji, do której się połączyłem, jest kilka przykładów użycia pakietu dbms_sql. Możesz również sprawdzić funkcję Toma Kyte'a dump_csv, która zapisuje wynik dowolnego zapytania do pliku CSV przy użyciu UTL_FILE
. Jeśli naprawdę chcesz zapisać dane do DBMS_OUTPUT
, możesz po prostu zastąpić UTL_FILE
połączenia z DBMS_OUTPUT
. Ale jestem prawie pewien, że chcesz zrobić coś bardziej przydatnego niż tylko zapisywanie danych do DBMS_OUTPUT
bufor, więc procedura Toma jest prawdopodobnie bliższa temu, co naprawdę próbujesz osiągnąć.