database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 14871 게시물 읽기
No. 14871
함수인지 패키지인지 에러나요.
작성자
홍상범(kildongp)
작성일
2003-07-08 20:54
조회수
2,164

아래 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)

이 글에 대한 댓글이 총 2건 있습니다.

잘못된건 없어보입니다. 아니 없습니다.

생성시키실때 한꺼번에 스풀받아서 처리하시지 말고

따로 따로 잘라서 실행해보세요.

kk님이 2003-07-09 15:11에 작성한 댓글입니다.

참고로

sql*plus 에서

show err

하면 에러내용이 나옵니다.

kk님이 2003-07-09 15:30에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
14874네트워크경로를 못찾는다는데...이를 우야죠?? [1]
미엉이
2003-07-09
2111
14873네트&#50916;드라이브에 테이블스페이스를 맹글려는데..... [1]
미영이
2003-07-09
1229
14872listener start 시 오류에 대한 답변부탁드립니다. [2]
질문이
2003-07-09
3727
14871함수인지 패키지인지 에러나요. [2]
홍상범
2003-07-08
2164
14868다른 유져의 table을 reerence할때 앞에 user. 을 붙이지 않는법? [1]
김상은
2003-07-08
1805
14867[질문]오라클8i에 데이터 insert시 이상한현상 [1]
김지호
2003-07-08
1100
14866MSSQL의 임시테이블(#temp)같은게 오라클에는 없나요?... 답답하네요..ㅠㅠ [1]
드기
2003-07-08
3382
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.024초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다