Procedure
Replace Arabic special characters by Farsi
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 | create or replace procedure ar2fa_replacer(p_owner in varchar2, p_table in varchar2 default null) is
    v_count number;
begin
    dbms_output.put_line('--- Ar to Fa Replacer: owner=' || p_owner || ', table=' || p_table);
    for col in (select * from dba_tab_cols
                where owner = upper(p_owner)
                  and data_type like '%CHAR%'
                  and (p_table is null or table_name = upper(p_table))
                order by table_name)
    loop
        execute immediate 'select count(1) from ' || col.owner || '.' || col.table_name ||
                          ' where rownum=1 and (' ||
                          col.column_name || ' like ''%ي%'' or ' ||
                          col.column_name || ' like ''%ك%'')' into v_count;
        if v_count = 1 then
            dbms_output.put_line('Updating ' || col.owner || '.' || col.table_name || ' - ' || col.column_name);
            execute immediate 'update ' || col.owner || '.' || col.table_name || ' set ' || col.column_name ||
                              ' = replace(replace(' || col.column_name || ', ''ي'', ''ی''), ''ك'', ''ک'')';
            commit;
        end if;
    end loop;
end;
 | 
  - Line 6, use dba_tab_colsinstead ofall_tab_cols
- Grant select any dictionary(line 6),select any table(line 12), andupdate any table(line 20) to procedure’s owner explicitly (roleDBAnot enough)
Drop Users with Search
| 1
2
3
4
5
6
 | begin
    for usr in (select username from all_users where username like 'TST%')
    loop
        execute immediate 'drop user '||usr.username||' cascade';
    end loop;
end;
 | 
Trigger
User logon
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 | create or replace trigger user_default_nls after logon on database
declare
    v_count number;
begin
    execute immediate 'alter session set time_zone = ''UTC''';
    execute immediate 'alter session set nls_language = ''AMERICAN''';
    execute immediate 'alter session set nls_comp = ''LINGUISTIC''';
    
    select count(1) into v_count from SCHEMA1.VIEW1 where USERNAME = sys_context('USERENV','SESSION_USER');
    
    if v_count = 1 or sys_context('USERENV','SESSION_USER') in ('U1', 'U2') then
        execute immediate 'alter session set nls_sort = ''BINARY_CI''';
    else
        execute immediate 'alter session set nls_sort = ''BINARY''';
    end if;
end;
 | 
  - In line 9, SCHEMA1.VIEW1is a view with the columnUSERNAMEcontaining list of upper-cased username as exceptions.
- Line 7 and 12 provide search case insensitive in strings REF.
Note: Appending _CI suffix for NLS_SORT results in case insensitivity due to REF.