暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 Woodpecker 2023-11-10
292

虚谷数据库,[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;命令进行查询,如下图。

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


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论