Я взял вашу процедуру и изменил ее, как показано ниже, посмотрите, работает ли она. Кроме того, я хочу сказать, что вы можете явно выполнять обработку исключений в процедуре, чтобы зафиксировать любую ошибку во время выполнения, а также создание представления с помощью '*' имеет некоторые недостатки. Пожалуйста, отметьте
CREATE OR REPLACE PROCEDURE SWAP_VIEWS
(
p_schema_name IN NVARCHAR2,
p_table_name IN NVARCHAR2
)
IS
lo_sql_string NVARCHAR2(4000);
lo_view_name NVARCHAR2(30);
lo_table_name NVARCHAR2(30);
BEGIN
-- I just prefer local variables for convenience to avoid more complex string in actual one and also for debugging purpose
lo_view_name := 'POL.V_'||p_table_name;
lo_table_name := p_schema_name||'.'||p_table_name;
lo_sql_string:= 'create or replace view '||lo_view_name||
' as '||
'select * from '||lo_table_name;
EXECUTE IMMEDIATE lo_sql_string;
END SWAP_VIEWS;
/