【问题标题】:Need to update an Oracle view, but the base table doesn't exist需要更新 Oracle 视图,但基表不存在
【发布时间】:2018-07-04 12:10:11
【问题描述】:

我正在尝试对 oracle 数据库上的视图进行极小的更改,但令我困惑的是,我想要更改的视图的基表/视图似乎不存在。

首先我是这样做的:

从 all_views where view_name='(view name)'中选择文本;

并得到视图文本,当然是这样的:

选择 (字段) FROM(表)

尝试自行运行此查询会返回一个错误,指出此表或视图不存在。搜索 all_ 表上的表名和视图列表不会返回任何结果。使用相同的源选择语句创建一个新视图告诉我无法创建它,因为该表或视图不存在。现在,这是一个生产数据库,所以这应该可以工作,因为我可以很好地使用现有视图。我对 oracle 数据库没有太多经验,所以我可能在这里遗漏了一些东西。

【问题讨论】:

    标签: oracle view


    【解决方案1】:

    我打赌这个视图是在另一个模式中。这是否与您的第一个查询返回相同:

    select text from all_views where view_name='(view name)' and owner = user;
    

    如果没有返回任何行,那么你需要找到视图的所有者:

    select owner from all_views where view_name = '(view_name)';
    

    把你的 SQL 改成

    select (fields) from (view_owner).(table);
    

    【讨论】:

    • 我知道视图的所有者并尝试从 (view_owner).(table) 中选择 (fields),然后被告知它仍然不存在。我只是无法想象这张桌子会在哪里或是什么。
    • 您可能只有视图的权限,而不是基础表的权限。 ALL_TABLES 中的所有者/表名组合吗?
    【解决方案2】:

    即使不存在基表也可以通过“FORCE”选项创建视图(“NO FORCE”是

    默认)通过这种方式:

    CREATE FORCE VIEW test_view AS

    从测试表中选择 c1、c2; -- 表,尚不存在。

    由于我们没有使用 FORCE 选项,因此没有创建视图。但是,尝试访问

    view 报错,因为表 TEST_TABLE 还不存在。

    【讨论】:

      【解决方案3】:

      哇,没关系。他们甚至没有要求我这样做。我错过了原始电子邮件中的那部分。

      【讨论】:

        【解决方案4】:

        通过使用“FORCE”,我们还可以通过双表(oracle 的默认表)创建视图。

        1-Example:create force view v1 as select a,b,c from dual;

        警告:视图创建时出现编译错误。

        2-Example:create force view v2 as select *from dual;

        答案:视图已创建。

        【讨论】:

          【解决方案5】:

          你应该使用 force 关键字..

          create force view my_view as elect column1 from table_test -- table is not exists here..
          

          【讨论】:

            猜你喜欢
            • 2020-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-25
            相关资源
            最近更新 更多