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
운영게시판
최근게시물
PostgreSQL Q&A 9007 게시물 읽기
No. 9007
postgreSQL 외부 라이브러리 활용 방법 2
작성자
노진광(kite20)
작성일
2012-07-16 16:18
조회수
11,649

 일전에 문의 드렸는데 일정이 촉박한데 진도가 안나가  다시 한번 문의 드립니다. 

SPX__API int SPXO_Initialize();]

현재 위와 같은 함수 해더를 가진 라이브러리를 사용하기 위해 래핑을 하는 중입니다. 

함수 내용은 

SPHINX_ORACLE_API int SPXO_Initialize()

{
int rv;
char* strRootPath;
char strConfPath[MAX_PATH]={0};
CIS_CONF_INFO Conf;
 
strRootPath = mcu_GetStoragePath(NULL);
sprintf(strConfPath, "%s/%s", strRootPath, CONFIG_FILE_NAME);
rv = LoadConfig(strConfPath, &Conf);
if(rv == ERR_CONF_LOAD_FAIL){
return rv;
}
 
if(strlen(Conf.LogInfo.path) > 0){
_Log_Init(&Conf.LogInfo);
}
 
rv = SPX_Initialize(NULL);
return rv;
}
 
위와 같습니다.  위 함수내에서도 다른 라이브러리를 참조합니다. 

위 함수를 사용하기 위해 새로 래핑라이브러리를 만들어야 하나요 저 함수를 수정하여 활용할수 있나요???

C 개발자가아니다 보니 많은 어려움이 있네요.

댓글이나 kite20@nate.com 메신저로 도움 좀  부탁드립니다. 

 

감사합니다. 

 

 

 

 

 

 

 

 

 

 

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

 추가 질문 입니다. 

라이브러리는 구조를 바꾸는 방식으로 해결하려 합니다. 

그전에 쿼리 질문 드리겠습니다. 

아래 쿼리는 오라클 쿼리입니다. 

 

CREATE OR REPLACE PACKAGE SPXDB AS

--Digest Algo

ALGO_SHA1                                CONSTANT INTEGER            :=     1;

--Ciper Algo

ALGO_SEED                                CONSTANT INTEGER            :=     256;

 

FUNCTION INIT            RETURN INTEGER;

FUNCTION FINAL           RETURN INTEGER;

FUNCTION GetAlgoSize(IN algoID  INTEGER,IN Base64 INTEGER, IN len INTEGER)       RETURN INTEGER;

FUNCTION ENCRYPT(IN pData  VARCHAR , IN keyID  VARCHAR, IN algoID INTEGER)       RETURN VARCHAR;

FUNCTION DECRYPT(IN eData VARCHAR , IN keyID  VARCHAR, IN algoID INTEGER)       RETURN VARCHAR;

FUNCTION HASH(IN pData VARCHAR , IN keyID VARCHAR, IN algoID INTEGER)       RETURN VARCHAR;

FUNCTION HASHEX(IN pData VARCHAR , IN keyID VARCHAR, IN algoID INTEGER)       RETURN VARCHAR;

FUNCTION HMAC(IN pData VARCHAR , IN keyID VARCHAR, IN algoID INTEGER)       RETURN VARCHAR;

END SPXDB;

/

위쿼리가 postgresql 에서는 생성이 되질 않네요.  상수 선언 부에대한 부분이 잘못된건가요???

노진광(kite20)님이 2012-07-17 14:30에 작성한 댓글입니다.

 plpgsql 에는 상수 선언이 없습니다. 

변수로 풀어야 할 듯 싶네요.

 

김상기(ioseph)님이 2012-07-18 02:06에 작성한 댓글입니다.

 CREATE OR REPLACE PACKAGE BODY SPXDB AS 

--Digest Algo
DECLARE 
ALGO_SHA1 INTEGER := 1;
ALGO_SHA256 INTEGER := 2;
ALGO_SHA384 INTEGER := 3;
ALGO_SHA512 INTEGER := 4;
ALGO_MD5 INTEGER := 5;
 
--Ciper Algo
ALGO_SEED INTEGER := 256;
ALGO_ARIA128 INTEGER := 512;
ALGO_ARIA256 INTEGER := 1024;
ALGO_AES128 INTEGER := 1280;
 
spxdb_init_check INTEGER := 0;
 
--begin
--INIT
   FUNCTION INIT()
      RETURN INTEGER is 
   BEGIN
         spxdb_init_check := SPXO_Initialize();
         RETURN spxdb_init_check;
         --dbms_output.put_line('INIT'); 오라클용
   END;
--FINAL
   FUNCTION FINAL()
      RETURN INTEGER is
   BEGIN
         spxdb_init_check := SPXO_Finalize();
         RETURN spxdb_init_check;
         --dbms_output.put_line('FINAL'); 오라클용
   END;
 
   --GetLength
   FUNCTION GetAlgoSize(algoID INTEGER, Base64 INTEGER, len INTEGER)
      RETURN INTEGER is
      DECLARE nLength INTEGER;
   BEGIN
      nLength := SPXO_AlgoSize(algoID, Base64, len);
      RETURN nLength;
   END;
   
   --ENCRYPT  
   FUNCTION ENCRYPT(pData VARCHAR , keyID VARCHAR, algoID INTEGER)
      RETURN VARCHAR is   
      DECLARE plain VARCHAR(1024);
      Enc VARCHAR(1024);
      strEnc VARCHAR(512);
      result INTEGER;
      dKeyID VARCHAR(30);
   BEGIN
      
      -- KEY ID Select (NULL : DEFAULT KEY)
      IF keyID IS NULL THEN  
         dKeyID := 'MCURIX_NULL';
      ELSE
         dKeyID := keyID;
      END IF;
      
      --plain := UTL_VARCHAR.CAST_TO_VARCHAR(pData); 오라클용
 plain := text2varchar(pData); -- text - > varchar
      
      result := SPXO_EncryptData(plain, Enc, 0, dKeyID, algoID);
      
      IF result < 0 THEN
       --insert into sphinxdb (col1) values ('INIT ERROR');
         RETURN NULL;
      END IF;
      
      --strEnc := UTL_VARCHAR.CAST_TO_VARCHAR(Enc);  오라클용    
 strEnc := Enc;    
 
      RETURN strEnc;
   END;
 END SPXDB;
 
 
위 쿼리는 제가 패키지쿼리 오라클용을 수정한 쿼리입니다. 
 
DECLARE
ALGO_SHA1 INTEGER := 1;  이런 식의 선언부는  샘플 함수로 정상 생성되는것을 확인 했습니다. 위 쿼리 실행시 
 
ERROR:  syntax error at or near "PACKAGE" 위치: 19
줄 1: CREATE OR REPLACE PACKAGE BODY acs
                       ^
 
라는 구문 자체가 문제가 있는듯합니다. 
 
아래는 postgresql 에서 제공하는 샘플입니다. 
CREATE OR REPLACE PACKAGE BODY acs
AS
  FUNCTION add_user (
    user_id     IN users.user_id%TYPE DEFAULT NULL,
    object_type     IN acs_objects.object_type%TYPE DEFAULT 'user',
    creation_date   IN acs_objects.creation_date%TYPE DEFAULT sysdate,
    creation_user   IN acs_objects.creation_user%TYPE DEFAULT NULL,
    creation_ip     IN acs_objects.creation_ip%TYPE DEFAULT NULL,
  ...
  ) RETURN users.user_id%TYPE
  IS
    v_user_id       users.user_id%TYPE;
    v_rel_id        membership_rels.rel_id%TYPE;
  BEGIN
    v_user_id := acs_user.new (user_id, object_type, creation_date,
                creation_user, creation_ip, email, ...
    RETURN v_user_id;
  END;
END acs;
/
show errors


변수 선언 테스트 샘플 
 
CREATE FUNCTION somefunc() RETURNS integer AS $$
DECLARE
    quantity integer := 30;
BEGIN
    RAISE NOTICE 'Quantity here is %', quantity;  -- Quantity here is 30
    quantity := 50;
    --
    -- Create a subblock
    --
    DECLARE
        quantity integer := 80;
    BEGIN
        RAISE NOTICE 'Quantity here is %', quantity;  -- Quantity here is 80
    END;
 
    RAISE NOTICE 'Quantity here is %', quantity;  -- Quantity here is 50
 
    RETURN quantity;
END;
$$ LANGUAGE plpgsql;
 
어디가 문젠지 기초부터 헤매이고 있는듯 합니다.   고수님들 조언을 부탁 합니다.~
 
노진광(kite20)님이 2012-07-18 11:20에 작성한 댓글입니다.
이 댓글은 2012-07-18 15:55에 마지막으로 수정되었습니다.

문서를 다시 확인해본 결과

제가 쓰는 9.0 버젼은 패키지 선언이 없네요

패키지 대신 스키마를 활용하여 처리 하였습니다. 

정말 기초부터 헤매이고 있었네요..

감사합니다. ~

 

 

노진광(kite20)님이 2012-07-18 15:54에 작성한 댓글입니다.
이 댓글은 2012-07-18 15:54에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
9010Postgres-XC를 설치했더니... [2]
지형준
2012-07-26
9770
9009pgAdmin 3 에서 한글 깨짐.. [1]
박대건
2012-07-19
12188
9008트리거 AFTER LOGON ON DATABASE 사용 여부 [3]
노진광
2012-07-18
9489
9007postgreSQL 외부 라이브러리 활용 방법 2 [4]
노진광
2012-07-16
11649
9006조건절을 하나 만들어야 하는데 도움좀 주세요. ㅋㅋ [4]
김현진
2012-07-13
9473
9005Dump Size와 관련하여 문의 드립니다. [1]
박병훈
2012-07-06
9305
9004postgreSQL 외부 라이브러리 활용 방법 [2]
노진광
2012-07-04
9844
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다