Search code examples
oracle-databaseselectplsqldeclare

How do I declare my select query in PL/SQL?


I want to declare a select query to use it in a trigger but I am a noob in sql in general :P Can somebody help me?

My code (example):

DECLARE Primary_Keys VARCHAR(20);
BEGIN
SELECT cons.constraint_type 
FROM all_constraints cons, all_cons_columns cols 
WHERE cols.owner = 'DAB_NAME' 
AND cons.constraint_type = 'P' 
AND cons.constraint_name = cols.constraint_name 
AND cons.owner = cols.owner;
END;

Solution

  • You may use a PROCEDURE composed of BULK COLLECT with FORALL :

    SQL> set serveroutput on;
    SQL> CREATE OR REPLACE PROCEDURE pr_list_constraints(
                                  i_owner IN all_cons_columns.owner%TYPE
                                  ) 
    IS
    BEGIN
          DBMS_OUTPUT.PUT_LINE('Constraint Types for '||i_owner);
          DBMS_OUTPUT.PUT_LINE('------------------------------- ');
       FOR constraint_rec
          IN (SELECT distinct cons.constraint_type 
                FROM all_constraints cons, all_cons_columns cols 
               WHERE cols.owner = i_owner --'DAB_NAME' 
               --AND cons.constraint_type = 'P'
                 AND cons.constraint_name = cols.constraint_name 
                 AND cons.owner = cols.owner)
       LOOP
          DBMS_OUTPUT.PUT_LINE(constraint_rec.constraint_type);
       END LOOP;
    END;
    /
    SQL> var p_owner varchar2(50);
    SQL> exec pr_list_constraints(:p_owner);
    
     Constraint Types for DAB_NAME 
     -------------------------------
     R
     U
     P
     C
    

    P.S. Using a DB trigger is irrelevant for such type of tasks.