按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
Grant succeeded。
SQL》 GRANT SELECT ON CUSTOMERS TO BRANDON;
Grant succeeded。
SQL》 GRANT SELECT ON EMPLOYEES TO BRANDON;
Grant succeeded。
SQL》 GRANT SELECT ON HISTORY TO BRANDON;
Grant succeeded。
SQL》 GRANT SELECT ON INVOICES TO BRANDON;
Grant succeeded。
SQL》 GRANT SELECT ON ORDERS TO BRANDON;
Grant succeeded。
SQL》 GRANT SELECT ON PRODUCTS TO BRANDON;
Grant succeeded。
SQL》 GRANT SELECT ON PROJECTS TO BRANDON;
Grant succeeded。
SQL》 GRANT SELECT ON VENDORS TO BRANDON;
Grant succeeded。
364
…………………………………………………………Page 365……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
分析
将 ECHO 和 FEEDBACK 设置为 ON 是很好的 设置了 FEEDBACK 我们就可以在执
行的时候看到 Grant succeeded 没用多少力气 我们就为 BRANDON 赋予了 10 个表的访
问权限 而且 你所做的工作可能会不只是 10 个表
在载入数据时解除对数的约束
当你向表中载入数据的时候 有时你会不得不解除对表的约束 假定你的表已经被删
减过或有损坏了 更有可能的是你的表存有如外部关键字之类的引用完整性约束 这时数
据库不会允许你向表中插入不在其它表中存在相关关系的数据 如果引用列在其它的表中
不存在的话 你在最初装入数据的时候你可能会不得不解除对表的约束 当然 当载入成
功以后 你应该将这些约束恢复
INPUT
SQL》 SET ECHO OFF
SQL》 SET FEEDBACK OFF
SQL》 SET HEADING OFF
SQL》 SPOOL DISABLE。SQL
SQL》 SELECT 'ALTER TABLE ' || TABLE_NAME ||
2 'DISABLE CONSTRAINT ' || CONSTRAINT_NAME || ';'
3 FROM SYS。DBA_CONSTRAINTS
4 WHERE OWNER = 'RYAN'
5 /
OUTPUT
ALTER TABLE ACCT_PAY DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE ACCT_REC DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE CUSTOMERS DISABLE CONSTRAINT FK_CUSTOMER_ID;
ALTER TABLE HISTORY DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE INVOICES DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE ORDERS DISABLE CONSTRAINT FK_ACCT_ID;
分析
365
…………………………………………………………Page 366……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
这个对象已经生成了一系列的 ALTER TABLE 语句来解除所有为 RYAN 所拥有的表 在连
接符末尾的分号是为了保证每个语句的完整
INPUT/OUTPUT
SQL》 SPOOL OFF
SQL》 SET ECHO OFF
SQL》 SET FEEDBACK ON
SQL》 START DISABLE。SQL
Constraint Disabled。
Constraint Disabled。
Constraint Disabled。
Constraint Disabled。
Constraint Disabled。
Constraint Disabled。
分析
注意在这里 ECHO 被设置为 OFF 也就是说你在执行不会看到对应的语句 但是由于
FEEDBACK 设置为 ON 所以你可以看到结果
Constraint Disabled。
如果 ECHO 和 FEEDBACK 都设置成 OFF 了 在执行时将什么都不会显示 只是经过
一段时间的暂停以后又回到了 SQL》 的提示符下
现在你可以放心地载入你的数据而不必担心因为约束而导致的错误了 约束是好事
但它在数据载入的时候会造成障碍 你也可以使用相同的思想来恢复对表的约束
一次创建多个同义字
另外一项令人烦躁和费力的工作是创建多个同义字 不管是公共的还是私有的 只有
DBA 可以创建共同的同义字 但是任何用户都可以创建私有的同义字
下边的例子是对所有为 RYAN 所拥有的表创建公共同义字
INPUT
SQL》 SET ECHO OFF
SQL》 SET FEEDBACK OFF
366
…………………………………………………………Page 367……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》 SET HEADING OFF
SQL》 SPOOL PUB_SYN。SQL
SQL》 SELECT 'CREATE PUBLIC SYNONYM ' || TABLE_NAME || ' FOR ' ||
2 OWNER || '。' || TABLE_NAME || ';'
3 FROM SYS。DBA_TABLES
4 WHERE OWNER = 'RYAN'
5 /
OUTPUT
CREATE PUBLIC SYNONYM ACCT_PAY FOR RYAN。ACCT_PAY;
CREATE PUBLIC SYNONYM ACCT_REC FOR RYAN。ACCT_REC;
CREATE PUBLIC SYNONYM CUSTOMERS FOR RYAN。CUSTOMERS;
CREATE PUBLIC SYNONYM EMPLOYEES FOR RYAN。EMPLOYEES;
CREATE PUBLIC SYNONYM HISTORY FOR RYAN。HISTORY;
CREATE PUBLIC SYNONYM INVOICES FOR RYAN。INVOICES;
CREATE PUBLIC SYNONYM ORDERS FOR RYAN。ORDERS;
CREATE PUBLIC SYNONYM PRODUCTS FOR RYAN。PRODUCTS;
CREATE PUBLIC SYNONYM PROJECTS FOR RYAN。PROJECTS;
CREATE PUBLIC SYNONYM VENDORS FOR RYAN。VENDORS;
现在 运行这个文件
INPUT/OUTPUT
SQL》 SPOOL OFF
SQL》 ED PUB_SYN。SQL
SQL》 SET ECHO ON
SQL》 SET FEEDBACK ON
SQL》 START PUB_SYN。SQL
SQL》 CREATE PUBLIC SYNONYM ACCT_PAY FOR RYAN。ACCT_PAY;
Synonym created。
SQL》 CREATE PUBLIC SYNONYM ACCT_REC FOR RYAN。ACCT_REC;
Synonym created。
SQL》 CREATE PUBLIC SYNONYM CUSTOMERS FOR RYAN。CUSTOMERS;
367
…………………………………………………………Page 368……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
Synonym created。
SQL》 CREATE PUBLIC SYNONYM EMPLOYEES FOR RYAN。EMPLOYEES;
Synonym created。
SQL》 CREATE PUBLIC SYNONYM HISTORY FOR RYAN。HISTORY;
Synonym created。
SQL》 CREATE PUBLIC SYNONYM INVOICES FOR RYAN。INVOICES;
Synonym created。
SQL》 CREATE PUBLIC SYNONYM ORDERS FOR RYAN。ORDERS;
Synonym created。
SQL》 CREATE PUBLIC SYNONYM PRODUCTS FOR RYAN。PRODUCTS;
Synonym created。
SQL》 CREATE PUBLIC SYNONYM PROJECTS FOR RYAN。PROJECTS;
Synonym created。
SQL》 CREATE PUBLIC SYNONYM VENDORS FOR RYAN。VENDORS;
Synonym created
分析
几乎是马上 所有的数据库用户都可以通过公共同义字来访问为 RYAN 所拥有的表了
现在用户无需在执行查询的时候对表加以限制 限制的意思就是必须指定表的所有者 如
RYAN。VENDORS
但是如果公共同义字并不存在呢 假如 BRANDON 想访问所有为 RYAN 所拥有的表
来创建私有同义字时该如何做呢
INPUT/OUTPUT
SQL》 CONNECT BRANDON
ENTER PASSWORD: *******
CONNECTED。
SQL》 SET ECHO OFF
SQL》 SET FEEDBACK OFF
SQL》 SET HEADING OFF
SQL》 SPOOL PRIV_SYN。SQL
SQL》 SELECT 'CREATE SYNONYM ' || TABLE_NAME || ' FOR ' ||
368
…………………………………………………………Page 369……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
2 OWNER || '。' || TABLE_NAME || ';'
3 FROM ALL_TABLES
4 /
CREATE SYNONYM DUAL FOR SYS。DUAL;
CREATE SYNONYM AUDIT_ACTIONS FOR SYS。AUDIT_ACTIONS;
CREATE SYNONYM USER_PROFILE FOR SYSTEM。USER_PROFILE;
CREATE SYNONYM CUSTOMERS FOR RYAN。CUSTOMERS;
CREATE SYNONYM ORDERS FOR RYAN。ORDERS;
CREATE SYNONYM PRODUCTS FOR RYAN。PRODUCTS;
CREATE SYNONYM INVOICES FOR RYAN。INVOICES;