【问题标题】:How to create ALTER READ ONLY using PL/SQL for multiple tables?如何使用 PL/SQL 为多个表创建 ALTER READ ONLY?
【发布时间】:2020-04-13 20:05:24
【问题描述】:

我想通过创建PROCEDURE 来了解如何使用PL/SQLALTERREAD 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;

【问题讨论】:

    标签: oracle stored-procedures plsql alter


    【解决方案1】:

    如果你想ALTER当前模式中的所有表,那么创建这个过程为

    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 三个单独的表,则将此过程创建为

    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;
    /
    

    通过循环遍历设置为这些表名称的数组值。

    无论创建什么过程,调用为

    SQL> EXEC UPDATE_PR_READ_ONLY;
    

    注意

    • PROCEDURE 的最后一个END 之后添加过程名称是 可选,如果添加它应该与PROCEDURE 名称相同。 因此,UPDATE_PROJ_REQU_READ_ONLY 应转换为 UPDATE_PR_READ_ONLY 在这种情况下。
    • 表达式FOR EACH ROW 用于数据库触发器,但不用于 存储过程
    • 在第一行的过程名称后添加关键字ISAS, 在CREATE 关键字之后使用OR REPLACE 选项更可取
    • 如果不使用EXECUTE IMMEDIATE,则无法发出DDL 语句 在存储过程中

    【讨论】:

      【解决方案2】:

      ALTER TABLE table_name 只读;

      【讨论】:

      • 你想要什么
      • 我找到了答案。你的答案不是我想要的。如果可以的话,你可以删除它。
      • 您能否分享您的解决方案以供我理解。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2016-03-28
      相关资源
      最近更新 更多