我目前有两个模式,A和B.
B有一个表,A执行选择插入和更新.
在我们的sql脚本中,我们已授予A权限,以便它可以完成其任务.
grant select on B.thetable to A
etc,etc
Run Code Online (Sandbox Code Playgroud)
现在,表'thetable'被删除,另一个表每天至少重命名为B.
rename someothertable to thetable
Run Code Online (Sandbox Code Playgroud)
执行此操作后,当A执行B.thetable上的选择时,我们会收到错误.
ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)
是否有可能在执行drop + rename操作后,授权也会丢失?
我们是否必须再次分配权限?
有些人没有补助金.
将数据插入'thetable'的每日进程每N次插入执行一次提交,因此无法执行任何回滚.这就是我们使用2张桌子的原因.
提前致谢
在我的程序中,我需要访问Oracle 11g数据库的模式.我一直试图使用这样的查询获取表的列表:
SELECT t.TABLE_NAME, t.OWNER
FROM ALL_TABLES t
WHERE t.DROPPED = 'NO'
ORDER BY t.TABLE_NAME
Run Code Online (Sandbox Code Playgroud)
查询工作,我得到一个表列表.不幸的是,当使用返回的表名查询某些表时,我收到以下错误:
ORA-00942:表或视图不存在
什么可能导致此错误?它可以归结为特权吗?
在一个单独的问题中,我也有点困惑,是否可能有两个或同名的表,以及如何区分这两个.我需要注意这个吗?
我使用.NET中的Oracle.DataAccess提供程序连接到数据库.它是一个远程服务器,不幸的是我对它的访问非常有限.
我正在尝试运行一个简单的 Hibernate 应用程序,但出现此错误:
org.hibernate.exception.SQLGrammarException: could not execute query
java.sql.SQLException: ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)
我的实体:
package beans;
import javax.persistence.*;
@Entity
public class Idt {
@Id
private int id;
@Column(name="name")
private String name;
public Idt(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
我的表在 Hr 用户中称为 IDT。
CREATE TABLE "HR"."IDT"
(
"ID" NUMBER …Run Code Online (Sandbox Code Playgroud) 我创建了一个包,其中包含我计划从单独的应用程序调用的存储过程.存储过程将返回架构中所有视图和表的排序列表.为此,它对DBA_TABLES和DBA_VIEWS同义词执行简单选择,如下所示:
CREATE OR REPLACE
PACKAGE BODY TITAN_ENTITY AS
PROCEDURE GETSCHEMAOBJECTS (RESULTS IN OUT T_CURSOR)
IS
V_CURSOR T_CURSOR;
BEGIN
OPEN V_CURSOR FOR
SELECT 'T' OBJECTTYPE, TABLE_NAME OBJECTNAME
FROM DBA_TABLES
WHERE OWNER = 'SONAR5'
UNION ALL
SELECT 'V' OBJECTTYPE, VIEW_NAME OBJECTNAME
FROM DBA_VIEWS
WHERE OWNER = 'SONAR5'
ORDER BY OBJECTNAME;
RESULTS := V_CURSOR;
END GETSCHEMAOBJECTS;
END TITAN_ENTITY;
Run Code Online (Sandbox Code Playgroud)
我已经确认有问题的同义词存在,并且是公开的:
CREATE PUBLIC SYNONYM "DBA_TABLES" FOR "SYS"."DBA_TABLES"
CREATE PUBLIC SYNONYM "DBA_VIEWS" FOR "SYS"."DBA_VIEWS"
Run Code Online (Sandbox Code Playgroud)
我的理解是,因为它们是公开的,所以我不需要任何进一步的权限来获取它们.如果这种理解不正确,我希望有人能够理解这个概念并指出我更准确的数据.
现在这是我的问题:我可以在Oracle SQL Developer中打开一个工作表,并从这些表中选择就好了.我得到了有意义的数据(567行,事实上).但是当我尝试执行存储过程时,Oracle会抱怨编译错误,如下所示:
Error(9,8): PL/SQL: SQL Statement ignored
Error(10,16): PL/SQL: ORA-00942: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在查询中使用WITH子句,但一直收到消息
ORA-00942:表或视图不存在
我试图创建一个简单的查询,仅作为此处的示例:
WITH
test AS
(
SELECT COUNT(Customer_ID)FROM Customer
)
SELECT * FROM test;
但是即使这样也行不通,它只是给出以下信息:
SELECT * FROM test; 2 3 4 5 6 SQL>
SELECT * FROM test
*第1行出现错误:
ORA-00942:表或视图不存在
我以前从未使用过WITH子句,这里缺少一些简单的东西吗?我正在使用Oracle数据库10g企业版10.2.0.1.0版-产品请提供任何建议。谢谢。
我使用TOAD进行PL/SQL开发.在TOAD中,当我输入程序名称并按f4时,我可以看到此程序的源代码.我认为TOAD从v $ sqltext视图中获取源代码.为了证实我的想法,我写了一个查询:
select * from v$sqltext
Run Code Online (Sandbox Code Playgroud)
但是当我执行上层查询时,Oracle给出了一个错误:
ORA-00942:表或视图不存在00942. 00000 - "表或视图不存在"*原因:
*操作:行错误:29列:15
所以我认为TOAD从其他地方而不是v $ sqltext视图获取程序的源代码.谁能告诉我这件事?十分感谢.
每当我在远程Oracle数据库的表上使用Django ORM执行简单查询时,我都会收到此错误:
>>> from apps.dl.models import Article
>>> Article.objects.using('dl').all()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/models/query.py", line 68, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/models/query.py", line 83, in __len__
self._result_cache.extend(list(self._iter))
File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/models/query.py", line 269, in iterator
for row in compiler.results_iter():
File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 672, in results_iter
for rows in self.execute_sql(MULTI):
File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 727, in execute_sql
cursor.execute(sql, params)
File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/backends/util.py", line 15, in execute
return self.cursor.execute(sql, params)
File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/backends/oracle/base.py", line 507, in …Run Code Online (Sandbox Code Playgroud) 虽然试图创建一个使用PL/SQL我发现自己坚持了以下问题的报告,我创建了访问使用DB连接远程DB 2代表的SQL查询,单独运行查询本身返回预期的结果,但是当我运行相同的查询并将结果放入我得到的游标中
PL/SQL: ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)
错误.
我不确定它是否与我为每个表使用的别名有关,或者select语句可能试图选择本地表,我不知道,你有什么建议吗?
PL/SQL:
DECLARE
CURSOR t_bug_details IS (SELECT h.*
FROM table1@REMOTEDB h,
table2@REMOTEDB rml
WHERE h.product_id IN (123)
AND h.category IN ('category')
AND h.status < 4
AND h.status NOT IN (1,2,3)
AND h.release_status IN (upper('P'))
--AND h.programmer IN (upper('MRFOO'))
AND h.some_id = rml.some_id
and rownum <=400);
REPORT_DAY VARCHAR2(40);
mail_html clob;
mail_bod clob;
BEGIN
FOR v_some_details in t_bug_details
LOOP
REPORT_DAY := TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS');
DBMS_OUTPUT.PUT_LINE(REPORT_DAY || '|' ||
v_some_details.reptnom || '|' || …Run Code Online (Sandbox Code Playgroud) 我的应用程序在Oracle上有几个表,其中用户XYZ是架构所有者.使用XYZ创建表.我想让ABCUSER在这些表上拥有CRUD权限.我已经通过访问权限GRANT ALL ON TABLEABC to ABCUSER并且授予成功.
但是当这个用户(ABCUSER)尝试查询数据库(从TABLEABC中选择*)时,它似乎不起作用.我收到错误消息
ORA-00942: table or view does not exist
00942. 00000 - "table or view does not exist"
*Cause:
*Action:
Error at Line: 1 Column: 14
Run Code Online (Sandbox Code Playgroud)
你能告诉我我错过了什么吗?
对于 PL-SQL 人员来说,这应该很容易选择。在将此问题标记为重复之前,请确保虽然错误消息可能很常见,但潜在问题与上一个问题相同。如果是这样,请提供指向已解决的确切逻辑重复问题的链接。一世
当我登录到我的模式时,我执行以下 PL-SQL 代码:
DECLARE
v_rpt_per_key NUMBER := 0;
BEGIN
SELECT MAX(rpt_per_key)
INTO v_rpt_per_key
FROM rxfinods_sta.hd_invc_ln_item_dtl_stat;
dbms_output.PUT_LINE('v_RPT_PER_KEY=' || v_rpt_per_key);
END;
/
Run Code Online (Sandbox Code Playgroud)
查询成功执行,最大值RPT_PER_KEY写入 Toad 中的输出窗口。
但是,当我在一个过程中执行基本相同的代码时。
CREATE OR REPLACE PROCEDURE hd_purge_test
IS
v_rpt_per_key NUMBER := 0;
BEGIN
SELECT MAX(stat.rpt_per_key)
INTO v_rpt_per_key
FROM rxfinods_sta.hd_invc_ln_item_dtl_stat stat;
--HD_INVC_LN_ITEM_DTL_STAT
dbms_output.PUT_LINE('v_RPT_PER_KEY=' || v_rpt_per_key);
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END hd_purge_test;
Run Code Online (Sandbox Code Playgroud)
我收到表不存在的错误。
[Warning] ORA-24344: success with compilation error
14/21 PL/SQL: ORA-00942: …Run Code Online (Sandbox Code Playgroud)