DEV Community

Query Filter
Query Filter

Posted on

sql10

SET VERIFY OFF FEEDBACK OFF HEADING OFF ECHO ON
SET SERVEROUTPUT ON

-- Capture argument or default to empty string (no prompt)
COLUMN p_flag_col NEW_VALUE p_flag
SELECT NVL('&1','') AS p_flag_col FROM dual;

-- Conditionally create functions
BEGIN
  IF UPPER('&p_flag') = 'Y' THEN
    DBMS_OUTPUT.PUT_LINE('Flag is Y — creating functions...');

    EXECUTE IMMEDIATE '
      CREATE OR REPLACE FUNCTION func1 RETURN VARCHAR2 IS
      BEGIN
        RETURN ''Func1'';
      END;';

    EXECUTE IMMEDIATE '
      CREATE OR REPLACE FUNCTION func2 RETURN VARCHAR2 IS
      BEGIN
        RETURN ''Func2'';
      END;';

    EXECUTE IMMEDIATE '
      CREATE OR REPLACE FUNCTION func3 RETURN VARCHAR2 IS
      BEGIN
        RETURN ''Func3'';
      END;';

    EXECUTE IMMEDIATE '
      CREATE OR REPLACE FUNCTION func4 RETURN VARCHAR2 IS
      BEGIN
        RETURN ''Func4'';
      END;';

    EXECUTE IMMEDIATE '
      CREATE OR REPLACE FUNCTION func5 RETURN VARCHAR2 IS
      BEGIN
        RETURN ''Func5'';
      END;';

    DBMS_OUTPUT.PUT_LINE('All requested functions created successfully.');
  ELSE
    DBMS_OUTPUT.PUT_LINE('Flag is not Y — skipping function creation.');
  END IF;
END;
/

-- Only describe func2 if flag = Y
COLUMN dummy NEW_VALUE dummy
SELECT CASE WHEN UPPER('&p_flag') = 'Y' THEN 1 ELSE 0 END AS dummy FROM dual;

-- SQL*Plus substitution: only DESC func2 if dummy=1
-- This is a simple trick using substitution variable
DEFINE do_desc = '&dummy'
-- If do_desc = 1, DESC func2, else nothing
-- SQL*Plus does not support IF, so we use the host script to check or just run DESC safely
PROMPT
PROMPT Description of func2 (only if flag is Y):
PROMPT --------------------------------------
-- Only attempt DESC if &do_desc = 1
-- In practice, just run DESC func2; it exists only if flag=Y
DESC func2

Enter fullscreen mode Exit fullscreen mode

Top comments (0)