⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 databaseschema1.sql

📁 介绍Oracle PL SQL编程
💻 SQL
字号:
/*
 * DatabaseSchema1.sql
 * Chapter 10, Oracle10g PL/SQL Programming
 * by Ron Hardman, Michael McLaughlin and Scott Urman
 *
 * This script demonstrates user defined triggers.
 */

SET ECHO ON
SET SERVEROUTPUT ON SIZE 1000000

DECLARE
  wrong_schema EXCEPTION;
  PRAGMA EXCEPTION_INIT(wrong_schema,-20001);

  retval VARCHAR2(1 CHAR);

  CURSOR privs IS
    SELECT   DISTINCT null
    FROM     user_role_privs
    WHERE    username = 'SYSTEM'
    OR       granted_role = 'DBA';

BEGIN
  OPEN privs;
  LOOP
    FETCH privs INTO retval;
    IF privs%NOTFOUND THEN
      RAISE wrong_schema;
      EXIT;
    ELSE
      EXECUTE IMMEDIATE
        'CREATE USER UserA IDENTIFIED BY UserA';
      EXECUTE IMMEDIATE
        'GRANT connect, resource, ADMINISTER DATABASE TRIGGER TO UserA';
      EXECUTE IMMEDIATE
        'CREATE USER UserB IDENTIFIED BY UserB';
      EXECUTE IMMEDIATE
        'GRANT connect, resource, ADMINISTER DATABASE TRIGGER TO UserB';
      EXECUTE IMMEDIATE
        'GRANT ADMINISTER DATABASE TRIGGER TO example';
    END IF; 
  END LOOP;
EXCEPTION
  WHEN wrong_schema THEN
    DBMS_OUTPUT.PUT_LINE('The script requires the SYSTEM user and '
    ||                   'you are using the <'||user||'> schema or '
    ||                   'the script requires a user with DBA role '
    ||                   'privileges.');
  WHEN others THEN
    RETURN;
END;
/


connect example/example

BEGIN
  FOR i IN (SELECT   null
            FROM     user_tables
            WHERE    table_name = 'TEMP_TABLE') LOOP
    EXECUTE IMMEDIATE 'DROP TABLE temp_table';
  END LOOP;
END;
/

CREATE TABLE temp_table (
  num_col    NUMBER,
  char_col   VARCHAR2(200)
  );

GRANT SELECT, UPDATE, INSERT ON temp_table TO usera;
GRANT SELECT, UPDATE, INSERT ON temp_table TO userb;

connect UserA/UserA
CREATE OR REPLACE TRIGGER LogUserAConnects
  AFTER LOGON ON SCHEMA
BEGIN
  INSERT INTO example.temp_table
    VALUES (1, 'LogUserAConnects fired!');
END LogUserAConnects;
/
show errors

connect UserB/UserB
CREATE OR REPLACE TRIGGER LogUserBConnects
  AFTER LOGON ON SCHEMA
BEGIN
  INSERT INTO example.temp_table
    VALUES (2, 'LogUserBConnects fired!');
END LogUserBConnects;
/
show errors


connect example/example
CREATE OR REPLACE TRIGGER LogAllConnects
  AFTER LOGON ON DATABASE
BEGIN
  INSERT INTO example.temp_table
    VALUES (3, 'LogAllConnects fired!');
END LogAllConnects;
/
show errors

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -