Что вам действительно нужно сделать, так это поговорить с вашими руководителями / разработчиками о том, почему разные базы данных не согласованы.Но, поскольку это сайт программирования, здесь приведен ответ на программирование с использованием динамического SQL.
Как уже указывалось, вы можете создавать представления в разных базах данных, чтобы обеспечить себе согласованный слой для запроса.Если вы не можете создать представления, вы можете сделать что-то вроде этого:
create table test ( present_column NUMBER );
insert into test select rownum * 10 from dual connect by rownum <= 5;
declare
l_rc SYS_REFCURSOR;
begin
BEGIN
OPEN l_rc FOR 'SELECT missing_column FROM test';
EXCEPTION
WHEN others THEN
OPEN l_rc FOR 'SELECT present_column FROM test';
END;
-- This next only works in 12c and later
-- In earlier versions, you've got to process l_rc on your own.
DBMS_SQL.RETURN_RESULT(l_rc);
end;
Это уступает другим решениям (либо гармонизация баз данных, либо создание представлений).Во-первых, вы не получаете проверку ваших запросов во время компиляции таким образом.