W
When you need to generate aligned table column names. Now updated to use in APEX calls (from Interactive Grid or from Forms DML processing) and to verify existing page items.
WITH s AS ( SELECT 'in_' AS arg_prefix, 'l_' AS var_prefix, 'rec.' AS set_prefix, -- &APEX_APP_ID AS apex_app_id, &APEX_PAGE_ID AS apex_page_id, -- 5 AS minimal_space, 4 AS tabulator_width, -- MAX(LENGTH(c.column_name)) AS name_length, MAX(c.table_name) AS table_name FROM user_tab_columns c WHERE c.table_name LIKE '&TABLE_NAME' ), t AS ( SELECT s.*, CEIL((LENGTH(s.var_prefix) + s.minimal_space + s.name_length) / s.tabulator_width) * s.tabulator_width AS var_length, CEIL((LENGTH(s.arg_prefix) + s.minimal_space + s.name_length) / s.tabulator_width) * s.tabulator_width AS arg_length, CEIL((LENGTH(s.set_prefix) + s.minimal_space + s.name_length) / s.tabulator_width) * s.tabulator_width AS set_length FROM s ) SELECT CASE WHEN c.nullable = 'N' THEN 'Y' END AS is_not_null, -- RPAD(t.var_prefix || LOWER(c.column_name), t.var_length, ' ') || LOWER(c.table_name) || '.' || LOWER(c.column_name) || '%TYPE' || ';' AS local_variables, -- RPAD(t.arg_prefix || LOWER(c.column_name), t.arg_length, ' ') || LOWER(c.table_name) || '.' || CASE WHEN c.nullable = 'N' THEN LOWER(c.column_name) || '%TYPE' ELSE RPAD(LOWER(c.column_name) || '%TYPE', t.arg_length + 3, ' ') || ':= NULL' END || ',' AS arguments, -- RPAD(t.set_prefix || LOWER(c.column_name), t.set_length, ' ') || ':= ' || t.arg_prefix || LOWER(c.column_name) || ';' AS record_set, -- RPAD(t.arg_prefix || LOWER(c.column_name), t.arg_length, ' ') || '=> :' || i.item_name || ',' AS call FROM user_tab_columns c JOIN t ON t.table_name = c.table_name LEFT JOIN apex_application_page_items i ON i.application_id = t.apex_app_id AND i.page_id = t.apex_page_id AND i.item_name = 'P' || i.page_id || '_' || c.column_name ORDER BY c.column_id;
Comments
Post a Comment