Test: Mid Term Exam Semester 2 
 
 

Review your answers, feedback, and question scores below. An asterisk (*) indicates a correct answer.

 Section 9 
      
  1.  Examine the following code: 
CREATE OR REPLACE PACKAGE emppack IS 
    PROCEDURE upd_emp (p_empno IN NUMBER, p_salary IN NUMBER); 
END emppack; 
CREATE OR REPLACE PACKAGE BODY emppack IS 
    -- Line A 
    PROCEDURE upd_emp (p_empno IN NUMBER, p_salary IN NUMBER) IS 
       BEGIN 
          IF NOT sal_ok(p_salary) THEN
             RAISE_APPLICATION_ERROR(-20201,'Invalid salary'); 
          END IF; 
    END upd_emp; 
    FUNCTION sal_ok(pf_salary NUMBER) RETURN BOOLEAN IS 
       BEGIN 
          IF pf_salary > 50000 THEN RETURN FALSE; 
          ELSE RETURN TRUE; 
          END IF; 
    END sal_ok; 
END emppack; 

What must be coded at Line A for this package to compile successfully? 
 Mark for Review 
(1) Points 
      
    FUNCTION sal_ok; 
  
    FUNCTION sal_ok(pf_salary NUMBER); 
  
    FUNCTION sal_ok(pf_salary NUMBER) RETURN BOOLEAN; (*) 
  
    PROCEDURE upd_emp (p_empno IN NUMBER, p_salary IN NUMBER); 
  
    Nothing is needed at Line A 
  
      
      Correct  
  
      
  2.  Package HRPACK contains the following public function: 
FUNCTION empfunc (p_deptno NUMBER) RETURN NUMBER IS 
BEGIN 
    UPDATE employees SET salary = salary * 1.1 
       WHERE department_id = p_deptno; 
    RETURN SQL%ROWCOUNT; 
END empfunc; 

What will happen when the following SQL statement is executed? 

SELECT department_name, hrpack.empfunc(department_id) 
FROM departments; 
 Mark for Review 
(1) Points 
      
    The SELECT will fail because you cannot return SQL%ROWCOUNT from a packaged function. 
  
    The SELECT will fail because you cannot call packaged functions from within a SQL statement. 
  
    The SELECT will fail because you cannot execute a DML statement from within a query. 
  
    The SELECT will succeed because it is referencing a different table from the function. (*) 
  
      
      Correct  
  
      
  3.  Package TAXPACK declares a global variable G_TAXRATE NUMBER(2,2). The value of the tax rate is stored in table TAXTAB in the database. You want to read this value automatically into G_TAXRATE each time a user session makes its first call to TAXPACK. How would you do this?  Mark for Review 
(1) Points 
      
    Declare the global variable as: 
g_taxrate NUMBER(2,2) := SELECT tax_rate FROM taxtab; 
 
  
    Create a database trigger that includes the following code: 
SELECT tax_rate INTO taxpack.g_taxrate FROM taxtab; 
 
  
    Add a private function to the package body of TAXPACK, and invoke the function from the user session. 
 
  
    Add a package initialization block to the package body of TAXPACK. 
(*)
 
  
      
      Correct  
  
      
  4.  We never need to use a forward declaration when invoking a public subprogram. True or False?  Mark for Review 
(1) Points 
      
    True (*) 
  
    False 
  
      
      Correct  
  
      
  5.  We need to declare a package variable named MYVAR, which can be referenced by any subprogram in the package but can NOT be referenced from outside the package. In the following code, where should MYVAR be declared? 
CREATE OR REPLACE PACKAGE varpack IS 
    -- Point A 
... 
END varpack; 
CREATE OR REPLACE PACKAGE BODY varpack IS 
    -- Point B 
PROCEDURE varproc IS 
    -- Point C 
    BEGIN 
       ... 
    END varproc; 
PROCEDURE ... 
... 
    -- Point D 
END varpack; 

 Mark for Review 
(1) Points 
      
    Point A 
  
    Point B (*) 
  
    Point C 
  
    Point D 
  
    Point B or Point C, they will both work 
  
      
      Correct  
  
      
  6.  Examine the following package specification: 
CREATE OR REPLACE PACKAGE taxpack IS 
    CURSOR empcurs IS SELECT * FROM employees; 
    PROCEDURE taxproc; 
END mypack; 

The package body of TAXPACK also includes a function called TAXFUNC. Which one of the following statements is NOT true? 
 Mark for Review 
(1) Points 
      
    The procedure can be invoked by: 
BEGIN 
    taxpack.taxproc; 
END; 

 
  
    The packaage will not compile because you cannot declare a cursor in the specification. 
(*)
 
  
    TAXPROC is a public procedure and TAXFUNC is a private function 
  
    TAXPROC can invoke TAXFUNC if TAXPROC is coded before TAXFUNC 
  
    TAXPROC can open the cursor 
  
      
      Correct  
  
      
  7.  Package OLDPACK is in your schema. What will happen when the following statement is executed? 
DROP PACKAGE oldpack; 
 Mark for Review 
(1) Points 
      
    The body will be dropped but the specification will be retained. 
  
    The specification will be dropped but the body will be retained. 
  
    Both the specification and the body will be dropped. (*) 
  
    The statement will fail because you must drop the body before you can drop the specification. 
  
      
      Correct  
  
      
  8.  Package NEWPACK contains several procedures and functions, including private function PRIVFUNC. From where can PRIVFUNC be invoked? (Choose two.)  Mark for Review 
(1) Points 
      
   (Choose all correct answers)  
      
    From an anonymous block 
  
    From any procedure in NEWPACK (*) 
  
    From any private function in another package 
  
    From any function in NEWPACK (*) 
  
    From any public procedure in another package 
  
      
      Correct  
  
      
  9.  A package contains both public and private subprograms. Which one of the following statements is true?  Mark for Review 
(1) Points 
      
    Each subprogram is loaded into memory when it is first invoked. 
  
    The public subprograms are all loaded into memory at the same time, but the private subprograms are loaded into memory one at a time as they are invoked. 
  
    The whole package is loaded into memory when the first call is made to any subprogram in the package. (*) 
  
    If three users invoke three different subprograms in the package, there will be three copies of the code in memory. 
  
      
      Correct  
  
      
  10.  When a change is made to the detailed code of a public procedure in a package (but not to the procedure's name or parameters), both the specification and the body must be recompiled. True or False?  Mark for Review 
(1) Points 
      
    True 
  
    False (*) 
  
      
      Correct  
 
 11.  Which of the following will display the detailed code of the subprograms in package DEPTPACK in your schema ?  Mark for Review 
(1) Points 
      
    SELECT text FROM USER_SOURCE 
WHERE name = 'DEPTPACK' 
AND type = 'PACKAGE' 
ORDER BY line; 
 
  
    SELECT text FROM USER_SOURCE 
WHERE name = 'DEPTPACK' 
AND type = 'PACKAGE BODY' 
ORDER BY line; 
(*)
 
  
    SELECT text FROM USER_SOURCE 
WHERE object_name = 'DEPTPACK' 
AND object_type = 'PACKAGE BODY' 
ORDER BY line; 
 
  
    SELECT text FROM USER_SOURCE
WHERE name = 'DEPTPACK' 
AND type = 'BODY' 
ORDER BY line; 
 
  
      
      Incorrect. Refer to Section 9.  
  
      
  12.  Which of the following exceptions can be raised ONLY when using the UTL_FILE package? (Choose two) Mark for Review 
(1) Points 
      
   (Choose all correct answers)  
      
    INVALID_PATH (*) 
  
    NO_DATA_FOUND 
  
    VALUE_ERROR 
  
    READ_ERROR (*) 
  
    E_MYEXCEP 
  
      
      Correct 
  
      
  13.  An Oracle directory called FILESDIR has been created by executing: 
CREATE OR REPLACE DIRECTORY filesdir AS 'C:\NEWFILES'; 
Which of the following will create a new text file called C:\NEWFILES\EMP_REPORT.TXT ?  Mark for Review 
(1) Points 
      
    UTL_FILE.CREATE('FILESDIR','EMP_REPORT.TXT'); 
  
    UTL_FILE.FOPEN('C:\NEWFILES\EMP_REPORT.TXT','w'); 
  
    UTL_FILE.FOPEN('FILESDIR','EMP_REPORT.TXT','w'); (*) 
  
    UTL_FILE.OPEN('FILESDIR','EMP_REPORT.TXT','c'); 
  
      
      Correct  
  
      
  14.  The DBMS_OUTPUT.PUT procedure places text in a buffer but does not display the contents of the buffer. True or False?  Mark for Review 
(1) Points 
      
    True (*) 
  
    False 
  
      
      Correct  
  
      
  15.  Why is it better to use DBMS_OUTPUT only in anonymous blocks, not inside stored subprograms such as procedures?  Mark for Review 
(1) Points 
      
    Because DBMS_OUTPUT cannot be used inside procedures 
  
    Because anonymous blocks display messages while the block is executing, while procedures do not display anything until their execution has finished 
  
    Because DBMS_OUTPUT should be used only for testing and debugging PL/SQL code (*) 
  
    Because DBMS_OUTPUT can raise a NO_DATA_FOUND exception if used inside a packaged procedure 
  
      
      Correct  
  
      
  16.  Examine the following code: 
CREATE OR REPLACE PROCEDURE myproc IS 
    CURSOR c_curs IS SELECT view_name FROM user_views; 
BEGIN 
    FOR v_curs_rec IN c_curs LOOP 
       EXECUTE IMMEDIATE 'DROP VIEW ' || v_curs_rec.view_name; 
    END LOOP; 
END; 

What will happen when this procedure is invoked? 
 Mark for Review 
(1) Points 
      
    All views in the user's schema will be dropped. (*) 
  
    The procedure will not compile successfully because the syntax of EXECUTE IMMEDIATE is incorrect. 
  
    The procedure will raise an exception because Dynamic SQL can drop tables but cannot drop views. 
  
    The procedure will raise an exception because one of the views is a complex view. 
  
      
      Correct  
  
      
  17.  Which of the following SQL statements can be included in a PL/SQL block only by using Dynamic SQL? (Choose two.)  Mark for Review 
(1) Points 
      
   (Choose all correct answers)  
      
    DELETE 
  
    SAVEPOINT 
  
    ALTER (*) 
  
    SELECT ..... FOR UPDATE NOWAIT 
  
    GRANT (*) 
  
      
      Correct  
  
      
  18.  The following procedure adds a column of datatype DATE to the EMPLOYEES table. The name of the new column is passed to the procedure as a parameter. 
CREATE OR REPLACE PROCEDURE addcol 
    (p_col_name IN VARCHAR2) IS 
    v_first_string VARCHAR2(100) := 'ALTER TABLE EMPLOYEES ADD ('; 
    v_second_string VARCHAR2(6) := ' DATE)'; 
BEGIN 
    ... Line A 
END; 

Which of the following will work correctly when coded at line A? (Choose two.) 
 Mark for Review 
(1) Points 
      
   (Choose all correct answers)  
      
    v_first_string || p_col_name || v_second_string; 
 
  
    EXECUTE IMMEDIATE v_first_string || p_col_name || v_second_string; 
(*)
 
  
    EXECUTE IMMEDIATE 'v_first_string' || p_col_name || 'v_second_string'; 
 
  
    v_first_string := v_first_string || p_col_name; 
EXECUTE IMMEDIATE v_first_string || v_second_string; 
(*)
 
  
    EXECUTE v_first_string || p_col_name || v_second_string; 
 
  
      
      Correct  
  
      
  19.  MARY wants HENRY to be able to query her EMPLOYEES table. Mary executes the following code: 
DECLARE 
    v_grant_stmt VARCHAR2(50); 
BEGIN 
    v_grant_stmt := 'GRANT SELECT ON employees TO henry'; 
    DBMS_SQL.EXECUTE(v_grant_stmt); 
END; 

Mary has successfully granted the privilege to Henry. True or False? 
 Mark for Review 
(1) Points 
      
    True 
  
    False (*) 
  
      
      Incorrect. Refer to Section 9.  
  
      
  20.  When a user session changes the value of a package variable, the new value can immediately be seen by other sessions. True or False?  Mark for Review 
(1) Points 
      
    True 
  
    False (*) 
  
      
      Correct  
 
21.  A cursor is declared in a package specification. User SIOBHAN opens the cursor and fetches the first three rows from the cursor's active set, but does not close the cursor. 
User FRED now connects to the database. FRED can immediately fetch the next three rows without opening the cursor. True or False?  Mark for Review 
(1) Points 
      
    True 
  
    False (*) 
  
      
      Correct  
  
      
  22.  The following package specification has been created: 
CREATE OR REPLACE PACKAGE mypack IS 
    FUNCTION myfunc(p_funcparam DATE) RETURN BOOLEAN; 
    PROCEDURE myproc(p_procparam IN NUMBER); 
END mypack; 

Which of the following will correctly invoke the package subprograms? (Choose two.) 
 Mark for Review 
(1) Points 
      
   (Choose all correct answers)  
      
    mypack.myfunc('22-JAN-07'); 
 
  
    mypack.myproc(35); 
(*)
 
  
    IF NOT mypack.myfunc(SYSDATE) THEN 
    DBMS_OUTPUT.PUT_LINE('Message'); 
END IF; 
(*)
 
  
    myproc(40); 
 
  
    v_num := mypack.myproc(22); 
 
  
      
      Correct  
  
      
  23.  Package MYPACK contains procedure MYPROC. You can see which parameters MYPROC uses by executing: DESCRIBE mypack.myproc. True or False?  Mark for Review 
(1) Points 
      
    True 
  
    False (*) 
  
      
      Incorrect. Refer to Section 9.  
  
      
  24.  Every subprogram which has been declared in a package specification must also be included in the package body. Triue or False?  Mark for Review 
(1) Points 
      
    True (*) 
  
    False 
  
      
      Correct  
  
      
  25.  Which one of the following can NOT be part of a Package ?  Mark for Review 
(1) Points 
      
    Procedures 
  
    Explicit cursors 
  
    Triggers (*) 
  
    Functions 
  
    Global variables 
  
      
      Correct  
  
      
 
      
 Section 10 
      
  26.  A DML statement trigger fires only once for each triggering DML statement, while a row trigger fires once for each row processed by the triggering statement. True or False?  Mark for Review 
(1) Points 
      
    True (*) 
  
    False 
  
      
      Correct  
  
      
  27.  You need to create a trigger that will fire whenever an employee's salary or job_id is updated, but not when any other column of the EMPLOYEES table is updated. Which of the following is the correct syntax to do this?  Mark for Review 
(1) Points 
      
    CREATE TRIGGER emp_upd_trigg 
AFTER UPDATE ON employees (salary, job_id) 
BEGIN ... 
 
  
    CREATE TRIGGER emp_upd_trigg 
AFTER UPDATE OF salary, job_id ON employees 
BEGIN ... 
(*)
 
  
    CREATE TRIGGER emp_upd_trigg 
AFTER UPDATE OF (salary, job_id) ON employees 
BEGIN ... 
 
  
    CREATE TRIGGER emp_upd_trigg 
AFTER UPDATE OF salary OR job_id ON employees 
BEGIN ... 
 
  
      
      Correct  
  
      
  28.  There are five employees in department 50. The following trigger is created: 
CREATE TRIGGER upd_emp 
AFTER UPDATE ON employees 
BEGIN 
    INSERT INTO audit_table VALUES (USER, SYSDATE); 
END; 

A user now executes: 

UPDATE employees SET salary = salary * 1.1 
    WHERE department_id = 50; 

How many rows will be inserted into audit_table? 
 Mark for Review 
(1) Points 
      
    One (*) 
  
    Two 
  
    Five 
  
    Six 
  
    None of the above 
  
      
      Correct  
  
      
  29.  What is wrong with the following code? 
CREATE TRIGGER dept_trigg 
BEFORE UPDATE OF department_name ON departments 
BEGIN 
    DBMS_OUTPUT.PUT_LINE(:NEW.department_name); 
END; 

 Mark for Review 
(1) Points 
      
    You cannot use :NEW in a BEFORE trigger, only in an AFTER trigger. 
  
    You cannot use :NEW or :OLD in a statement trigger. (*) 
  
    You cannot use DBMS_OUTPUT.PUT_LINE inside a trigger. 
  
    The second line should be: 
BEFORE UPDATE ON departments.department_name 
 
  
      
      Correct  
  
      
  30.  There are 3 employees in department 90 and 5 employees in department 50. The following trigger has been created: 
CREATE TRIGGER upd_emp_trigg 
AFTER UPDATE ON employees 
FOR EACH ROW 
BEGIN 
... 

A user now executes: 

UPDATE employees SET department_id = 50 
    WHERE department_id = 90; 

How many times will the trigger fire? 
 Mark for Review 
(1) Points 
      
    Once 
  
    Three times (*) 
  
    Four times 
  
    Five times 
  
    Eight times 
  
      
      Correct  
 
  31.  In the following code: 
CREATE TRIGGER mytrigg 
INSTEAD OF INSERT OR UPDATE ON my_object_name 
FOR EACH ROW 
BEGIN ... 
my_object_name can be the name of a table. True or False? 
 Mark for Review 
(1) Points 
      
    True 
  
    False (*) 
  
      
      Correct  
  
      
  32.  INSTEAD OF triggers are always row triggers, even if FOR EACH ROW is omitted. True or False?  Mark for Review 
(1) Points 
      
    True (*) 
  
    False 
  
      
      Correct  
  
      
  33.  With which kind of trigger can the :OLD and :NEW qualifiers be used?  Mark for Review 
(1) Points 
      
    DDL triggers 
  
    Database Event triggers 
  
    Statement triggers 
  
    Row triggers (*) 
  
    AFTER triggers 
  
      
      Correct  
  
      
  34.  Which of the following are good guidelines to follow when creating a database trigger? (Choose two.)  Mark for Review 
(1) Points 
      
   (Choose all correct answers)  
      
    Where possible, use a trigger to enforce a foreign key constraint. 
  
    Use triggers to override privilege checking and view other users' private tables. 
  
    Do not use a trigger to replace or duplicate something which the Oracle Server does automatically. (*) 
  
    Use triggers to prevent unauthorized users from SELECTing confidential data. 
  
    Do not create a trigger that automatically fires another trigger. (*) 
  
      
      Correct  
  
      
  35.  A trigger can be created in the database or within an application. True or False?  Mark for Review 
(1) Points 
      
    True (*) 
  
    False 
  
      
      Incorrect. Refer to Section 10.  
  
      
  36.  You can use a trigger to prevent rows from being deleted from the EMPLOYEES table on Mondays. True or False?  Mark for Review 
(1) Points 
      
    True (*) 
  
    False 
  
      
      Correct  
  
      
  37.  You can code COMMIT and ROLLBACK statements in a trigger body. True or False?  Mark for Review 
(1) Points 
      
    True 
  
    False (*) 
  
      
      Correct  
  
      
  38.  Which of the following best describes a database trigger?  Mark for Review 
(1) Points 
      
    A subprogram that checks whether a user has typed the correct password to log on to the database. 
  
    A PL/SQL subprogram that executes automatically whenever an associated database event occurs. (*) 
  
    A PL/SQL subprogram that always returns exactly one value. 
  
    A subprogram that is invoked explicitly by the calling application. 
  
    A PL/SQL subprogram that inserts rows into a logging table. 
  
      
      Correct  
  
      
  39.  A business rule states that an employee's salary cannot be greater than 99,999.99 or less than 0. The best way to enforce this rule is by using:  Mark for Review 
(1) Points 
      
    A datatype of NUMBER(7,2) for the SALARY column 
  
    A database trigger 
  
    A check constraint (*) 
  
    An application trigger 
  
    A view 
  
      
      Correct  
  
      
  40.  A trigger can be a public subprogram within a PL/SQL package. True or False?  Mark for Review 
(1) Points 
      
    True 
  
    False (*) 
  
      
      Correct  
 
 41.  What is the purpose of using the CALL statement in a trigger?  Mark for Review 
(1) Points 
      
    It allows an INSTEAD OF trigger to be a statement trigger. 
  
    It allows the trigger body code to be placed in a separate procedure. (*) 
  
    It prevents cascading triggers. 
  
    It allows the trigger body code to be placed in a separate procedure or function. 
  
    It allows both DML events and DDL events to be handled using a single trigger. 
  
      
      Incorrect. Refer to Section 10.  
  
      
  42.  You want to prevent any objects in your schema from being altered or dropped. You decide to create the following trigger: 
CREATE TRIGGER stop_ad_trigg 
    -- Line A 
BEGIN 
    RAISE_APPLICATION_ERROR(-20203,'Invalid Operation'); 
END; 

What should you code at Line A ? 
 Mark for Review 
(1) Points 
      
    AFTER ALTER OR DROP ON SCHEMA 
  
    INSTEAD OF ALTER OR DROP ON SCHEMA 
  
    BEFORE ALTER OR DROP ON SCHEMA (*) 
  
    BEFORE ALTER, DROP ON SCHEMA 
  
    AFTER ALTER, DROP ON SCHEMA 
  
      
      Correct  
  
      
  43.  Which of the following statements could cause a DDL trigger to fire?  Mark for Review 
(1) Points 
      
    DROP TABLE employees; 
  
    ALTER TABLE departments ADD (budget NUMBER(8,2)); 
  
    CREATE TABLE newemp AS SELECT * FROM employees; 
  
    TRUNCATE TABLE locations; 
  
    All of the above (*) 
  
      
      Correct  
  
      
  44.  The database administrator wants to write a log record every time an Oracle Server error occurs in any user's session. The DBA creates the following trigger: 
CREATE TRIGGER log_errs_trigg 
    -- Line A 
BEGIN 
    INSERT INTO errlog_table VALUES (...); 
END; 
What should the DBA code at Line A ? 
 Mark for Review 
(1) Points 
      
    AFTER ERROR ON DATABASE 
  
    AFTER SERVER ERROR ON DATABASE 
  
    AFTER SERVERERROR ON SCHEMA 
  
    AFTER SERVERERROR ON DATABASE (*) 
  
    AFTER ORACLE ERROR ON SCHEMA 
  
      
      Correct  
  
      
  45.  A trigger automatically inserts a row into a logging table every time a user's session receives this error message: 
ORA-00942: table or view does not exist 
What kind of trigger is this?  Mark for Review 
(1) Points 
      
    A row trigger 
  
    A statement trigger 
  
    A database event trigger (*) 
  
    A DDL trigger 
  
    An AFTER trigger 
  
      
      Incorrect. Refer to Section 10.  
  
      
  46.  Examine the following code: 
CREATE TRIGGER emp_trigg 
AFTER UPDATE OF salary ON employees 
FOR EACH ROW 
DECLARE 
    v_count NUMBER; 
BEGIN 
    -- Line A 
END; 

Which of the following statements is NOT allowed at Line A? 
 Mark for Review 
(1) Points 
      
    SELECT count(*) INTO v_count FROM departments; 
  
    UPDATE employees SET job_id = 'IT_PROG' WHERE employee_id = :OLD.employee_id; 
  
    SELECT count(*) INTO v_count FROM employees; (*) 
  
    DBMS_OUTPUT.PUT_LINE('A salary was updated'); 
  
    None. All of the above are allowed. 
  
      
      Incorrect. Refer to Section 10.  
  
      
  47.  What is wrong with the following code? 
CREATE TRIGGER call_trigg 
AFTER LOGOFF ON SCHEMA 
BEGIN 
    CALL drop_proc; 
END; 

 Mark for Review 
(1) Points 
      
    You cannot code an AFTER LOGOFF trigger 
  
    When using CALL, you must not code BEGIN 
  
    When using CALL, you must not code END; 
  
    The CALL statement must not end with a semicolon (;) 
  
    All of the above (*) 
  
      
      Incorrect. Refer to Section 10.  
  
      
  48.  User AYSEGUL successfully creates the following trigger: 
CREATE TRIGGER loc_trigg 
BEFORE UPDATE ON aysegul.locations 
BEGIN .... 

AYSEGUL now tries to drop the LOCATIONS table. What happens? 
 Mark for Review 
(1) Points 
      
    An error message is displayed because you cannot drop a table that is associated with a trigger. 
  
    The table is dropped and the trigger is disabled. 
  
    The trigger is dropped but the table is not dropped. 
  
    Both the table and the trigger are dropped. (*) 
  
    None of the above. 
  
      
      Correct  
  
      
  49.  You need to disable all triggers that are associated with DML statements on the DEPARTMENTS table. Which of the following commands should you use?  Mark for Review 
(1) Points 
      
    ALTER TABLE departments DISABLE ALL TRIGGERS; (*) 
  
    ALTER TRIGGER DISABLE ALL ON departments; 
  
    ALTER TABLE departments DISABLE TRIGGERS; 
  
    DISABLE ALL TRIGGERS ON departments; 
  
    ALTER TABLE departments DROP ALL TRIGGERS; 
  
      
      Correct  
  
      
  50.  MARY and JOE's schemas each contain an EMPLOYEES table. JOE creates the following trigger: 
CREATE TRIGGER upd_trigg 
AFTER DELETE ON joe.employees 
FOR EACH ROW 
BEGIN 
    DELETE FROM mary.employees 
       WHERE employee_id = :OLD.employee_id; 
END; 

A third user TOM needs to delete rows from JOE's EMPLOYEES table. What object privileges will TOM and JOE need? 
 Mark for Review 
(1) Points 
      
    TOM does not need any object privileges, but JOE needs DELETE on both TOM.EMPLOYEES and MARY.EMPLOYEES 
  
    TOM needs DELETE on JOE.EMPLOYEES and JOE needs DELETE on MARY.EMPLOYEES (*) 
  
    JOE does not need any object privileges, but TOM needs DELETE on MARY.EMPLOYEES 
  
    TOM needs DELETE on MARY.EMPLOYEES and JOE needs EXECUTE on TOM.UPD_TRIGG 
  
      
      Correct  
  
     
