CREATE OR REPLACE PROCEDURE session_para
IS
TYPE va_t IS VARRAY(100) OF VARCHAR2(300);
va va_t := va_t('PLSQL_CCFLAGS', 'PLSQL_CODE_TYPE', 'PLSQL_COMPILER_FLAGS', 'PLSQL_DEBUG', 'PLSQL_OPTIMIZE_LEVEL', 'PLSQL_V2_COMPATIBILITY', 'PLSQL_WARNINGS', 'ASM_POWER_LIMIT', 'COMMIT_WRITE', 'CREATE_STORED_OUTLINES', 'CURSOR_SHARING', 'DB_BLOCK_CHECKING', 'DB_CREATE_FILE_DEST', 'DB_CREATE_ONLINE_LOG_DEST_n', 'DB_FILE_MULTIBLOCK_READ_COUNT', 'DB_FILE_NAME_CONVERT', 'DDL_WAIT_FOR_LOCKS', 'GLOBAL_NAMES', 'HASH_AREA_SIZE', 'LOG_ARCHIVE_DEST_n', 'LOG_ARCHIVE_DEST_STATE_n', 'LOG_ARCHIVE_MIN_SUCCEED_DEST', 'MAX_DUMP_FILE_SIZE', 'NLS_CALENDAR', 'NLS_COMP', 'NLS_CURRENCY', 'NLS_DATE_FORMAT', 'NLS_DATE_LANGUAGE', 'NLS_DUAL_CURRENCY', 'NLS_ISO_CURRENCY', 'NLS_LANGUAGE', 'NLS_LENGTH_SEMANTICS', 'NLS_NCHAR_CONV_EXCP', 'NLS_NUMERIC_CHARACTERS', 'NLS_SORT', 'NLS_TERRITORY', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT', 'OBJECT_CACHE_MAX_SIZE_PERCENT', 'OBJECT_CACHE_OPTIMAL_SIZE', 'OLAP_PAGE_POOL_SIZE', 'OPTIMIZER_DYNAMIC_SAMPLING', 'OPTIMIZER_FEATURES_ENABLE', 'OPTIMIZER_INDEX_CACHING', 'OPTIMIZER_INDEX_COST_ADJ', 'OPTIMIZER_MODE', 'PARALLEL_INSTANCE_GROUP', 'PARALLEL_MIN_PERCENT', 'QUERY_REWRITE_ENABLED', 'QUERY_REWRITE_INTEGRITY', 'RECYCLEBIN', 'REMOTE_DEPENDENCIES_MODE', 'RESUMABLE_TIMEOUT', 'SESSION_CACHED_CURSORS', 'SKIP_UNUSABLE_INDEXES', 'SMTP_OUT_SERVER', 'SORT_AREA_RETAINED_SIZE', 'SORT_AREA_SIZE', 'SQL_TRACE', 'SQLTUNE_CATEGORY', 'STAR_TRANSFORMATION_ENABLED', 'STATISTICS_LEVEL', 'TIMED_OS_STATISTICS', 'TIMED_STATISTICS', 'TRACEFILE_IDENTIFIER', 'WORKAREA_SIZE_POLICY');
n NUMBER;
result VARCHAR2(32000);
BEGIN
BEGIN
FOR n IN 1 .. va.COUNT
LOOP
-- Taking parameter, its in nested block so that if one of them gives error, it should not fail whole procedure.
BEGIN
EXECUTE IMMEDIATE 'BEGIN :x := $$' || va(n) || ';' || 'END;' USING OUT result;
EXCEPTION
WHEN OTHERS
THEN NULL;
END;
-- Only printing the one that have some value
IF length(result) > 0
THEN
DBMS_OUTPUT.PUT_LINE(va(n) || ' = ' || result);
END IF;
END LOOP;
END;
END;