- Notifications
You must be signed in to change notification settings - Fork 234
/
Copy pathintl.sql
90 lines (74 loc) · 1.75 KB
/
intl.sql
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/***
*
* Usage example
* -------------
*
* input 'intl.sql';
*
* execute procedure sp_register_character_set ('CHARSET_NAME', 1);
* commit;
*
* execute procedure sp_unregister_character_set ('CHARSET_NAME');
* commit;
*
*/
set term !;
create or alter procedure sp_register_character_set
(
name char(31) character set unicode_fss,
max_bytes_per_character smallint
)
as
declare variable id smallint;
declare variable temp_id smallint;
begin
name =upper(name);
id =255;
for select rdb$character_set_id
from rdb$character_sets
order by rdb$character_set_id desc
into :temp_id do
begin
if (temp_id = id) then
begin
id = id -1;
if (id =127) then
id =126;
end
else
break;
end
if (id >0) then
begin
insert into rdb$types
(rdb$field_name, rdb$type, rdb$type_name, rdb$system_flag)
values ('RDB$CHARACTER_SET_NAME', :id, :name, 0);
insert into rdb$character_sets
(rdb$character_set_name, rdb$character_set_id, rdb$system_flag, rdb$bytes_per_character, rdb$default_collate_name)
values (:name, :id, 0, :max_bytes_per_character, :name);
insert into rdb$collations
(rdb$collation_name, rdb$collation_id, rdb$character_set_id, rdb$system_flag)
values (:name, 0, :id, 0);
end
end!
create or alter procedure sp_unregister_character_set
(
name char(31) character set unicode_fss
)
as
declare variable id smallint;
begin
name =upper(name);
select rdb$character_set_id
from rdb$character_sets
where rdb$character_set_name = :name
into :id;
deletefrom rdb$collations
where rdb$character_set_id = :id;
deletefrom rdb$character_sets
where rdb$character_set_id = :id;
deletefrom rdb$types
where rdb$field_name ='RDB$CHARACTER_SET_NAME'and rdb$type_name = :name;
end!
set term ;!
commit;