场景:达梦迁移oracle,生成视图ddl脚本,在执行新建视图时报错ORA-00942: 表或视图不存在解决方法;经检查视图关系的表均存在且大小写无误。
原因:在APP_TEST模式下新建视图基础表为APP_DEMO下属表;这里涉及到跨模式和用户的权限
create or replace force view "APP_TEST"."DEMO_VIEW" ("ID","COLUMN") as select ID,COLUMN FROM APP_DEMO.TABLE;
解决方法:执行GRANT SELECT ON APP_DEMO.TABLE TO APP_TEST;
附加:一次性授权模式下所有表给指定用户的脚本
DECLARE
v_user VARCHAR2(100) := '用户名'; -- 将'用户名'替换为实际的用户名
CURSOR c_tables IS
SELECT table_name
FROM all_tables
WHERE owner = 'JG_EDW_DATA_DYD'; -- 确保这里的大小写与数据库中的实际模式名匹配
BEGIN
FOR r_table IN c_tables LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON JG_EDW_DATA_DYD.' || r_table.table_name || ' TO ' || v_user;
-- 可选:输出已授权的表名,以便跟踪
DBMS_OUTPUT.PUT_LINE('Granted SELECT on ' || 'JG_EDW_DATA_DYD.' || r_table.table_name || ' to ' || v_user);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
-- 处理可能出现的错误,例如权限不足
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;