【发布时间】:2013-12-02 05:49:13
【问题描述】:
我正在使用 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";
【问题讨论】:
-
你到底遇到了什么错误??
-
请您的 DBA 授予您创建表的权限。
-
@Rony - 更新后出现错误“[Oracle]ORA-00942:表或视图不存在”
-
@Rachcha - 不幸的是,这不是一个选择。
-
当您从新表查询(并限定所有者)并确保您使用的数据库用户已被授予已被授予选择表权限的角色时,您是否确认了会话上下文?