如何使用 PL/SQL 为多个表创建 ALTER READ ONLY?
How to create ALTER READ ONLY using PL/SQL for multiple tables?
我想知道如何通过创建 PROCEDURE
使用 PL/SQL
到 ALTER
到 READ ONLY
的表。到目前为止,我尝试了以下代码块:
CREATE PROCEDURE UPDATE_PROJ_REQU_READ_ONLY
FOR EACH ROW
BEGIN
ALTER TABLE projects READ ONLY;
ALTER TABLE request_activities READ ONLY;
ALTER TABLE proj_rec_services READ ONLY;
END UPDATE_PROJ_REQU_READ_ONLY;
更改 TABLE table_name 只读;
如果您想 ALTER
当前架构中的所有 table,请将此过程创建为
SQL> CREATE OR REPLACE PROCEDURE UPDATE_PR_READ_ONLY IS
v_sql VARCHAR2(150);
BEGIN
FOR c IN
(
SELECT *
FROM user_objects o
WHERE o.object_type
)
LOOP
v_sql := 'ALTER TABLE '||c.object_name||' READ ONLY';
EXECUTE IMMEDIATE v_sql;
END LOOP;
END;
/
或如果你想ALTER
只有三个人table,那么创建这个程序为
SQL> CREATE OR REPLACE PROCEDURE UPDATE_PR_READ_ONLY IS
v_sql VARCHAR2(150);
v_tab owa.vc_arr;
BEGIN
v_tab(1):='PROJECTS'; v_tab(2):='REQUEST_ACTIVITIES'; v_tab(3):='PROJ_REC_SERVICES';
FOR i in 1..3
LOOP
v_sql := 'ALTER TABLE '||v_tab(i)||' READ ONLY';
EXECUTE IMMEDIATE v_sql;
END LOOP;
END;
/
通过遍历设置为 table 名称的数组值。
无论创建什么程序,都调用为
SQL> EXEC UPDATE_PR_READ_ONLY;
注意
- 在
PROCEDURE
的最后 END
之后添加过程名称是
可选,如果添加它应该与 PROCEDURE
名称相同。
因此,UPDATE_PROJ_REQU_READ_ONLY
应转换为
UPDATE_PR_READ_ONLY
在这种情况下。
- 表达式
FOR EACH ROW
用于数据库触发器,但不用于
存储过程
- 在第一行程序名称后添加关键字
IS
或AS
,
在 CREATE
关键字 之后使用 OR REPLACE
选项更可取
- 如果不使用
EXECUTE IMMEDIATE
,则无法发出 DDL
语句
在存储过程中
我想知道如何通过创建 PROCEDURE
使用 PL/SQL
到 ALTER
到 READ ONLY
的表。到目前为止,我尝试了以下代码块:
CREATE PROCEDURE UPDATE_PROJ_REQU_READ_ONLY
FOR EACH ROW
BEGIN
ALTER TABLE projects READ ONLY;
ALTER TABLE request_activities READ ONLY;
ALTER TABLE proj_rec_services READ ONLY;
END UPDATE_PROJ_REQU_READ_ONLY;
更改 TABLE table_name 只读;
如果您想 ALTER
当前架构中的所有 table,请将此过程创建为
SQL> CREATE OR REPLACE PROCEDURE UPDATE_PR_READ_ONLY IS
v_sql VARCHAR2(150);
BEGIN
FOR c IN
(
SELECT *
FROM user_objects o
WHERE o.object_type
)
LOOP
v_sql := 'ALTER TABLE '||c.object_name||' READ ONLY';
EXECUTE IMMEDIATE v_sql;
END LOOP;
END;
/
或如果你想ALTER
只有三个人table,那么创建这个程序为
SQL> CREATE OR REPLACE PROCEDURE UPDATE_PR_READ_ONLY IS
v_sql VARCHAR2(150);
v_tab owa.vc_arr;
BEGIN
v_tab(1):='PROJECTS'; v_tab(2):='REQUEST_ACTIVITIES'; v_tab(3):='PROJ_REC_SERVICES';
FOR i in 1..3
LOOP
v_sql := 'ALTER TABLE '||v_tab(i)||' READ ONLY';
EXECUTE IMMEDIATE v_sql;
END LOOP;
END;
/
通过遍历设置为 table 名称的数组值。
无论创建什么程序,都调用为
SQL> EXEC UPDATE_PR_READ_ONLY;
注意
- 在
PROCEDURE
的最后END
之后添加过程名称是 可选,如果添加它应该与PROCEDURE
名称相同。 因此,UPDATE_PROJ_REQU_READ_ONLY
应转换为UPDATE_PR_READ_ONLY
在这种情况下。 - 表达式
FOR EACH ROW
用于数据库触发器,但不用于 存储过程 - 在第一行程序名称后添加关键字
IS
或AS
, 在CREATE
关键字 之后使用 - 如果不使用
EXECUTE IMMEDIATE
,则无法发出DDL
语句 在存储过程中
OR REPLACE
选项更可取