ORA-00942: 表或视图不存在解决方法

ORA-00942: 表或视图不存在是比较常见的问题,原因也多种多样。今天碰到了这个问题,从网上搜到了很多解决方案,在此做一个整理。仅做为记录方便以后查阅。

1、表或视图确实不存在或名称写错

2、表名大小写

Oracle对大小写敏感,通常在创建和查询时对名称数据库会自动转为大写,但语句中有引号时会按引号中的内容保留。例如:

create table "TableName"  (
   "col1"        VARCHAR2(2),
   "col2"        DATE
);

这时查询语句也要相应改成

select * from  "TableName";

3、权限问题导致

平时所做的对其它用户下资源的操作权限有些是通过角色授权的,但在存储过程、函数、触发器不能直接使用,需要单独授权。授权语句举例:

grant select on sys.XXX TO XXX;

4、需要在存储过程中使用role权限(这个我没太看懂,以下代码部分为粘贴,来自http://www.cnblogs.com/jzbml/p/5991918.html)

SQL> select * from dba_role_privs where grantee=‘SUK‘;

  GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
  ------------ ------------ ------------ ------------
  SUK DBA NO YES
  SUK CONNECT NO YES
  SUK RESOURCE NO YES

  --用户SUK拥有DBA这个role

  --再创建一个测试存储过程:
  create or replace procedure p_create_table
  is
  begin
  Execute Immediate ‘create table create_table(id int)‘;
  end p_create_table;

  --然后测试
  SQL> exec p_create_table;

  begin p_create_table; end;

  ORA-01031: 权限不足
  ORA-06512: 在"SUK.P_CREATE_TABLE", line 3
  ORA-06512: 在line 1

  --可以看到,即使拥有DBA role,也不能创建表。role在存储过程中不可用。
  --遇到这种情况,我们一般需要显式进行系统权限,如grant create table to suk;
  --但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程
  --实际上,oracle给我们提供了在存储过程中使用role权限的方法:
  --修改存储过程,加入Authid Current_User时存储过程可以使用role权限。
  create or replace procedure p_create_table
  Authid Current_User is
  begin
  Execute Immediate ‘create table create_table(id int)‘;
  end p_create_table;

  --再尝试执行:
  SQL> exec p_create_table;

  PL/SQL procedure successfully completed

  --已经可以执行了。

我在我遇到的问题中试了这个方法,得到以下结果:

Compilation errors for PACKAGE BODY XXX.XXXX

Error: PLS-00157: AUTHID 只允许在方案级程序中使用
Line: xxxx
Text: PRM_ERRORMSG OUT VARCHAR2) Authid Current_User IS

目前了解到的就是这些,有其它解决方法继续更新。

时间: 2024-11-09 23:01:44

ORA-00942: 表或视图不存在解决方法的相关文章

ORACLE EXP不能导出空表的原因分析及解决方法

一.不能导出空表的原因 1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出. 2.设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment. 在sqlplus中,执行如下命令: SQL>alter system set deferred_segment_creation=false; 查看: SQL>show parameter deferred_segment_creat

问题-[Access]“无法打开工作组信息文件中的表 'MSysAccounts'”的问题的解决方法

问题现象:ado.net oledb方式访问Access数据库文件时报错“无法打开工作组信息文件中的表 'MSysAccounts'”的问题的解决方法 问题处理:1.数据库名称不能命名为:System.mdb可以改为其它名称如:user.mdb 2.表字段名称不能为id名称,可以改为其它名称:abcid,sdeid,dbid,... 3.表名,或字段名不能命名与Access数据库中系统名称相同可以改为其它名称 问题-[Access]"无法打开工作组信息文件中的表 'MSysAccounts'&q

django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法

django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法 找到解决方案,执行: [python] view plain copy python manage.py migrate myapp --fake 数据库表结构同步成功. django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法 原文地址:https://

【原创】关于oracle11G空表无法导出问题的解决方法

在网上搜索了相关资料后,结合自己的实际情况,总结了一下解决方法,具体如下: 1.先批量分析统计各表总记录数: --批量分析统计表记录总数 begin for obj in (select 'analyze table '||table_name|| ' compute statistics ' sqlstr from user_tables) loop --in里面的select无分号 execute immediate obj.sqlstr; end loop; end; 2.再批量分配ext

MySQL单表多字段模糊查询解决方法

在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段 例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍.然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录. 可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词.如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此

sybase 数据库不能更新系统表,报错的解决方法

Sybase官网网址:infocenter.sybase.com/archive/index.jsp?topic=/com.sybase.dc00729_1500/html/errMessageAdvRes/BABDHDFF.htm ERROR :Ad-hoc updates to system catalogs not enabled. A user with System Security Officer (SSO) role must reconfigure system to allow

ssh框架提交表单数据后,数据库表出现问号?的解决方法

解决方法如下:连接数据库的时候需要指定编码方式,如下所示: jdbc.url = jdbc:mysql:///dbName?useUnicode=true&characterEncoding=UTF-8

MVC5 新建项目里不包含jquery.unobtrusive-ajax.js(MVC5异步表单的问题)解决方法

Asp.NET MVC 5 高级编程第5版.pdf 中有解决方法: 用NUGET程序包管理器控制台安装下面这两个文件Install-Package jQuery –version 1.10.2Install-Package Microsoft.jQuery.Unobtrusive.Ajax –version 3.0.0 NUGET程序包管理器控制打开方法: 转自:http://www.cnblogs.com/jys509/p/3878685.html

用户登录记住用户名导致表单自动填充bug解决方法

最近做项目出现了一个极其讨厌的bug:在用户登录网站时,浏览器会自动提示是否记住密码,当选择记住密码时,正常浏览网页,会发现有那么几个input输入框会自动填充用户名,非常讨厌, 于是就觉得挺简单的一个bug,想了几种解决办法: 方法一:利用html5表单新增属性 autocomplete="off",刷新后尝试,并没有卵用: 方法二:利用js来控制,进入页面时,给input表单设置value为空,心想这下可以了吧,结果还是没毛用: 方法三:给input表单设置只读属性 readonl