DEV Community

Query Filter
Query Filter

Posted on

compile

SET SERVEROUTPUT ON SIZE UNLIMITED
SET ECHO OFF
SET FEEDBACK OFF

-- =============================
-- Function definitions
-- =============================

CREATE OR REPLACE FUNCTION FUNC_1 RETURN VARCHAR2 AS
BEGIN
    RETURN 'Function 1';
END;
/

CREATE OR REPLACE FUNCTION FUNC_2 RETURN VARCHAR2 AS
BEGIN
    RETURN 'Function 2';
END;
/

-- ... add all other functions here ...

-- =============================
-- Wait until all functions are VALID
-- =============================
DECLARE
    v_status VARCHAR2(10);
    v_done   BOOLEAN := FALSE;
BEGIN
    WHILE NOT v_done LOOP
        v_done := TRUE;

        FOR r IN (
            SELECT object_name, status
            FROM user_objects
            WHERE object_type = 'FUNCTION'
              AND object_name IN ('FUNC_1','FUNC_2' /* add all function names here */)
        ) LOOP
            IF r.status <> 'VALID' THEN
                v_done := FALSE;
                DBMS_LOCK.SLEEP(0.1); -- wait 100ms before checking again
            END IF;
        END LOOP;
    END LOOP;

    DBMS_OUTPUT.PUT_LINE('All functions are compiled and valid.');
END;
/

Enter fullscreen mode Exit fullscreen mode

Top comments (0)