아래 sql을 실행시키면 이런 에러가 뜹니다.
Warning: Package created with compilation errors.
어디가 잘못된건지 알려면 어떻게 해야 하나요?
start source)
create or replace package random
is
procedure srand(new_seed in number);
procedure get_rand(r OUT number);
procedure get_rand_max(r OUT number, n IN number);
function rand return number;
function rand_max(n IN number) return number;
function rand_string(ssiz IN number) return varchar2;
function smaller(x IN number, y IN number) return number;
pragma restrict_references(rand, WNDS);
pragma restrict_references(rand_max, WNDS);
pragma restrict_references(random, WNDS, RNPS);
pragma restrict_references(rand_string, WNDS);
pragma restrict_references(smaller, WNDS);
end random;
create or replace package body random
is
multiplier constant number := 22695477;
increment constant number := 1;
"2^32" constant number := 2 ** 32;
"2^16" constant number := 2 ** 16;
"0x7fff" constant number := 32767;
Seed number := 1;
function smaller(x IN number, y IN number) return number is
begin
if x <= y then
return x;
else
return y;
end if;
end smaller;
function rand_string(ssiz IN number) return varchar2 is
i number;
m number;
c char;
result varchar2(2000) := '';
begin
m := smaller(ssiz,2000);
for i in 1..m loop
c := substr('abcdefghijklmnopqrstuvwxyz0123456789',rand_max(36),1);
result := result || c;
end loop;
return result;
end rand_string;
procedure srand(new_seed in number) is
begin
Seed := new_seed;
end srand;
function rand return number is
begin
Seed := mod(multiplier * Seed + increment, "2^32");
return bitand(Seed/"2^16", "0x7fff");
end rand;
procedure get_rand(r OUT number) is
begin
r := rand;
end get_rand;
function rand_max(n IN number) return number is
begin
return mod(rand, n) + 1;
end rand_max;
procedure get_rand_max(r OUT number, n IN number) is
begin
r := rand_max(n);
end get_rand_max;
begin
select userenv('SESSIONID')
into Seed
from dual;
end random;
create or replace function convbin(c1 char) return char is
loop1 number;
value number;
divis number;
r1 varchar2(30);
begin
r1 := '';
value := ascii(c1);
divis := 128;
for loop1 in 0..7 loop
if trunc(value/divis) = 1 then
r1 := r1 || '1';
else
r1 := r1 || '0';
end if;
value := value mod divis;
divis := divis / 2;
end loop;
return r1;
end;
create or replace function encrypt(c1 char) return char is
c2 varchar2(3);
c3 varchar2(7);
loop1 number;
loop11 number;
r1 varchar2(8);
r2 varchar2(8);
r3 number;
result varchar2(40);
divis number;
begin
c2 := random.rand_string(3);
c3 := 'key_' || c2;
result := '';
for loop1 in 1..length(c1) loop
r1 := convbin(substr(c1,loop1,1));
r2 := convbin(substr(c3,loop1,1));
divis := 128;
r3 := 0;
for loop11 in 1..8 loop
if to_number(substr(r1,loop11,1))+to_number(substr(r2,loop11,1))=1 then
r3 := r3 + divis;
end if;
divis := divis / 2;
end loop;
result := result || chr(r3);
end loop;
return result || c2;
end;
create or replace function decrypt(c char) return char is
c1 varchar2(40);
c2 varchar2(3);
c3 varchar2(7);
loop1 number;
loop11 number;
r1 varchar2(8);
r2 varchar2(8);
r3 number;
result varchar2(40);
divis number;
begin
c1 := SUBSTR(TRIM(c), 0, LENGTH(TRIM(c))-3);
c2 := SUBSTR(TRIM(c), LENGTH(TRIM(c))-2, LENGTH(TRIM(c)));
c3 := 'key_' || c2;
result := '';
for loop1 in 1..length(c1) loop
r1 := convbin(substr(c1,loop1,1));
r2 := convbin(substr(c3,loop1,1));
divis := 128;
r3 := 0;
for loop11 in 1..8 loop
if to_number(substr(r1,loop11,1))+to_number(substr(r2,loop11,1))=1 then
r3 := r3 + divis;
end if;
divis := divis / 2;
end loop;
result := result || chr(r3);
end loop;
return result;
end;
end source)
|