无法访问Oracle SQL表

时间:2013-12-02 05:49:13

标签: sql oracle insert

我正在使用Oracle数据库,我正在尝试添加一个表,但遗憾的是我没有对数据库的完全访问权限,我创建了我的表创建脚本并在本地运行它没有任何问题(我可以选择,插入,删除等),在传递相同的脚本以在远程服务器上运行后,我得到了回溯说没有错误。但是我无法访问我的新表。

我可以使用

查看表格
SELECT *
FROM all_tables 
WHERE table_name = '[my New Table]'

然而,当我跑

SELECT * 
FROM [my New Table]

我收到错误:[Oracle] ORA-00942:表或视图不存在。我认为这是权限问题,但我的代码找不到任何错误

GRANT SELECT, UPDATE, DELETE, INSERT ON "[USER WHO CREATES THE TABLE]"."[my New Table]" to [MY_ROLE];

以下是SQL执行代码:

PROMPT Connecting as the application schema owner [owner] to &&dbname
ACCEPT ownerpassword char format [format] prompt "Please enter [owner] password: " hide
CONNECT [owner]/&ownerpassword@&&dbname

@@pr_dr_all.sql --(drops table if exists)
@@pr_cr_tables_tso_tcom.sql --(creates the table)
@@pr_gr_tso_tcom.sql --(sets grants)
@@pr_cr_constraints_tso_tcom.sql --(sets constraints)

PROMPT Connecting as the application user [user] to &&dbname
ACCEPT userpassword char format [format] prompt "Please enter [user] password: " hide 
CONNECT [user]/&userpassword@&&dbname

@@pr_dr_syn.sql --(drops synonyms)
@@pr_cr_syn_tso_tcom.sql --(creates synonyms)

spool off

pr_cr_tables_tso_tcom.sq:

CREATE TABLE "[owner]"."[table name]"
  (
    "[column 1]" NUMBER NOT NULL ENABLE,
    "[column 2]" NUMBER,
    "[column 3]" VARCHAR2(200 BYTE),
    "[column 4]" VARCHAR2(200 BYTE),
    "[column 5]" NUMBER,
    "[column 6]" NUMBER
  )
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE
  (
    INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT
  )
  TABLESPACE "USERS" ;

  CREATE SEQUENCE  [owner]."[table name]_SEQ"  MINVALUE 1 MAXVALUE 99999999999999999999 INCREMENT BY 1 START WITH 81 CACHE 20 NOORDER  NOCYCLE ;

    CREATE OR REPLACE TRIGGER "[owner]"."[table name]_TRG" BEFORE
      INSERT ON [table name] FOR EACH ROW WHEN (NEW.ID IS NULL) BEGIN
      SELECT [table name]_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
    END;
    /
    ALTER TRIGGER "[owner]"."[table name]_TRG" ENABLE;

pr_gr_tso_tcom.sql

GRANT SELECT, UPDATE, DELETE, INSERT ON "[owner]"."[table name]" to [role];
GRANT SELECT ON "[owner]"."[table name]_SEQ"  to [role];

pr_cr_syn_tso_tcom.sql

CREATE SYNONYM [table name]_SYN FOR "[owner]"."[table name]";
CREATE SYNONYM [table name]_SEQ_SYN FOR "[owner]"."[table name]_SEQ";

2 个答案:

答案 0 :(得分:2)

无论如何你必须设置架构来创建表,插入.... 如果不是oracle将选择默认架构。

首先确保您的表在正确的架构中创建,联系它们并询问架构。如果您没有设置架构,那么它们可能是在其他架构中创建的,

如果您只是传递一个sql文件,并且使用sqlplus或其他工具运行它,则更有可能发生错误。

使用以下行启动您的sql文件:

alter session set current_schema=PUTSchemaNameHere;

spool /folder/NameOfLog.log
set termout off
set echo on 
set feedback on 
set timing on 
set define off

上面的代码将在指定的文件夹中生成一个具有所需名称的日志,因此如果出现任何错误,您可以追溯错误。 (或确保创建表格)

如果你逐个传递命令,请确保将模式放在表名,过程名称之前....

例如,以下命令将在所需的模式中创建一个表

create table PutSchemaNameHere.TableName (column1 number,column2 varchar2(50));

答案 1 :(得分:1)

如果您尝试将查询从不同的架构运行到该表所在的架构,则需要在表名前加上架构,例如

SELECT * FROM [schema that table is located on].[my New Table]

否则,您可以为表名创建一个同义词。