quote all words that aren[apos ]t quoted yet
declare p_tab_fqname alias for $1; v_temp_fqname text default ''; v_pre_quoted text[] default '{}'; v_pre_quote_counter smallint default 0; v_count_fqname smallint default 0; v_fqname_split text[]; v_quoted_fqname text default ''; begin v_temp_fqname := p_tab_fqname; LOOP v_pre_quote_counter := v_pre_quote_counter + 1; v_pre_quoted[v_pre_quote_counter] := substring(v_temp_fqname from '%#""%"#"%' for '#'); IF v_pre_quoted[v_pre_quote_counter] <> '' THEN v_temp_fqname := replace(v_temp_fqname, v_pre_quoted[v_pre_quote_counter], '@' || v_pre_quote_counter); ELSE EXIT; END IF; END LOOP; v_fqname_split := string_to_array(v_temp_fqname , '.'); v_count_fqname := array_upper (v_fqname_split, 1); FOR i in 1..v_count_fqname LOOP IF substring(v_fqname_split[i],1,1) = '@' THEN v_quoted_fqname := v_quoted_fqname || v_pre_quoted[substring (v_fqname_split[i] from 2)::int]; ELSE v_quoted_fqname := v_quoted_fqname || '"' || v_fqname_split[i] || '"'; END IF; IF i < v_count_fqname THEN v_quoted_fqname := v_quoted_fqname || '.' ; END IF; END LOOP; return v_quoted_fqname; end;