SQL động không thể thấy biến PL / SQL của bạn:bạn cần chuyển cho nó một chuỗi có thể được thực thi trong phạm vi của công cụ SQL. Vì vậy, bạn cần nối tên bảng với văn bản soạn sẵn của câu lệnh:
query1 := 'SELECT max(c) FROM ' || variable_name;
Bạn cũng cần trả kết quả của truy vấn thành một biến.
Đây là cách nó hoạt động (Tôi đã loại bỏ một số mã không cần thiết khỏi ví dụ của bạn):
DECLARE
c_table VARCHAR2(40);
c_obj VARCHAR2(20);
BEGIN
for lrec in ( select a as tab_name from A )
LOOP
EXECUTE IMMEDIATE 'SELECT max(object_ref) FROM ' || lrec.tab_name
into c_obj ;
dbms_output.put_line('Maximum value: '|| lrec.tab_name
|| '='|| c_obj);
END LOOP;
END;