我正在使用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";
答案 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]
否则,您可以为表名创建一个同义词。