Динамичният SQL не може да види вашата PL/SQL променлива:трябва да му предадете низ, който може да бъде изпълнен в обхвата на SQL двигателя. Така че трябва да свържете името на таблицата с шаблонния текст на израза:
query1 := 'SELECT max(c) FROM ' || variable_name;
Трябва също така да върнете резултата от заявката в променлива.
Ето как работи (премахнах част от ненужния код от вашия пример):
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;