虚谷数据库,[E5021] 表或视图不存在,虚谷数据库模式切换

使用虚谷数据库时,对数据库的库-模式-表关系不熟悉的伙伴往往会出现,明明表存在但是查表时,却看到数据库报错[E5021] 表或视图不存在。此时往往只需要切换会话的属主即可。

虚谷数据库的库表模式关系

虚谷数据库不像mysql那种每个库对应单一的schema,而是每个库中可以存在不同的schema进行对象管理。

来看一下简图:

在这里插入图片描述

由上图来看,当我们登录虚谷数据库时,输入的数据库库名和用户名(账号),决定了登录后的默认库和会话属主。

**会话属主:**登录后打开一个会话的默认用户(模式)

案例:

数据准备:

--切换到系统库建库(避免数据库冗余,新建库只能再系统库进行操作)
USE system;
--创建新库test,并设置库级字符编码
CREATE DATABASE test CHAR SET 'UTF8';
--切换到test库
USE test;
--新建用户U1,并设置密码(用户会默认生成同名模式。且该默认模式不可重命名)
CREATE USER U1 IDENTIFIED BY 'U1@123456';
--新建用户U21,并设置密码
CREATE USER U2 IDENTIFIED BY 'U1@123456';
--新建模式S1
CREATE SCHEMA S1;
--新建模式S2
CREATE SCHEMA S2;
--新建U1模式下的表U1.U1_TEST
CREATE TABLE U1.U1_TEST(ID INT);
--新建U2模式下的表U2.U2_TEST
CREATE TABLE U2.U2_TEST(ID INT);
--新建S1模式下的表S1.S1_TEST
CREATE TABLE S1.S1_TEST(ID INT);
--新建S2模式下的表S2.S2_TEST
CREATE TABLE S2.S2_TEST(ID INT);
--授权
GRANT SELECT ANY TABle in schema S1 TO u1;
GRANT SELECT ANY TABle in schema S2 TO u2;

以SYSDBA用户登录数据库,分别查询U1.U1_TEST 和 U1_TEST
在这里插入图片描述

可见,带模式访问无问题,但是不带模式访问则无法查询到表。说明登录后存在默认的模式限制,导致无法不带模式名访问其他模式下的表。

再试一次,用U1用户的登录到数据库,不带模式查询上述建过的表:
在这里插入图片描述

可见,U1用户登录进库后,可不带模式访问到U1模式下的表,却不能访问其他模式下的表,说明当前会话窗口的默认模式是U1。

默认模式切换

虚谷数据库提供sql命令进行模式切换,使用后可以切换会话的默认模式,从而进行不带模式的访问。

切换模式的SQL如下:

set schema to 模式名 

再次以U1用户登录库后,切换U2模式后访问U2模式下的表:

在这里插入图片描述

成功访问。

总结

不带模式访问虚谷数据库下的表的时候,要清楚当前会话的默认模式是什么,可以使用**select current_schema;**命令进行查询,如下图。

当访问的表的模式和会话默认模式不一致时,使用命令切换会话默认模式即可正常访问。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值