hangum / TadpoleForDBTools

https://tadpolehub.com
537 stars 148 forks source link

1.7.4 버전에서 프로시저를 찾아오지 못합니다. #950

Open warnee opened 7 years ago

warnee commented 7 years ago

사용 버전 : 1.7.4 Docker 버전

1.7.1 standalone 버전에서 oracle 패키지와 프로시저 목록이 1.7.4 Docker 버전에서는 패키지 목록은 보이지만 패키지를 선택했을때 내부 프로시저의 목록이 나타나지 않습니다.

이슈 확인을 위해 필요한 것이 있으면 말씀해 주시면 확인해 보겠습니다.

jeongjaehong commented 7 years ago

안녕하세요...^^;

다음 부분에서 아래와 같은 쿼리를 이용하여 패키지와 패키지 내부의 프로시저 또는 함수 목록을 조회하여 오브젝트 익스플로어에 표시하도록 하고 있습니다. /com.hangum.tadpole.engine/src/com/hangum/tadpole/engine/query/OracleSQL.xml

all_objects, all_procedures, all_arguments

에 대한 접근권한이 없어서 해당 정보를 조회하지 못해서 발생하는 문제일 수 있습니다.

*select from all_objects;** 형태로 해당 관련 테이블들에 대한 접근(select)권한이 있는지 확인해 주시기 바랍니다

올챙이 로그인 후에 에디터 창에서 select문으로 확인해 보시면 됩니다.

-- 패키지 목록
    SELECT  
          s.object_name AS packagename
        , s.object_name AS name
        , s.object_type AS TYPE
        , #db_name#   AS db
        , s.created
        , (CASE WHEN 'VALID' = NVL (b.status, 'VALID') AND 'VALID' = s.status THEN 'VALID' ELSE 'INVALID' END) AS status
        , s.owner as schema_name
    FROM all_objects s 
        LEFT JOIN all_objects b ON s.owner = b.owner and s.object_name = b.object_name AND b.object_type = 'PACKAGE BODY'
    WHERE 1=1
      AND s.owner = (#schema_name#)
      AND s.object_type = 'PACKAGE'
    ORDER BY s.object_type DESC, s.object_name ;

-- 패키지 내용 조회
select distinct 
    s.object_name as packagename
    ,s.procedure_name as name
    ,(CASE WHEN a.argument_name IS NULL AND a.in_out IS NOT NULL THEN 'FUNCTION' ELSE 'PROCEDURE' END) as type
    , nvl(s.overload, 0) as overload 
    , s.owner as schema_name
 from all_procedures s
         LEFT JOIN all_arguments a
            ON     s.owner = a.owner
               AND s.object_name = a.package_name
               AND s.procedure_name = a.object_name
               AND a.in_out = 'OUT'
 where 1=1
  and s.owner = (#schema_name#)
  and s.object_name = (#package_name#)
  and s.procedure_name > ' '
 order by 2, 3 ;
hangum commented 7 years ago

@warnee 확인 부탁드려요. @jeongjaehong 형 권한이 없어도 가져올수 있는 방법이 무엇인지 확인해 주세요.

warnee commented 7 years ago

알려주신 패키지 목록조회 와 패키지 내용조회 SQL 을 실행해 보았는데 정상적으로 실행됩니다. 패키지 목록도 조회되고 패키지 내의 프로시저 목록도 조회됩니다.

warnee commented 7 years ago

회사 프로시저라 바로 보여드리지 못해서 죄송합니다. 다음과 같은 방식으로 패키지가 생성됩니다.

PACKAGE BODY PKG_SAMPLE
AS

    PROCEDURE GetUsers
    (
            p_cursor    OUT SYS_REFCURSOR,
            p_event OUT NUMBER,
            p_user_name IN  VARCHAR2
    )
    IS
    BEGIN
            p_event := c_init_event;

            OPEN p_cursor FOR
                    SELECT  user_id AS user_id, user_name AS user_name
                    FROM        users
                    WHERE       user_name = p_user_name;

                    p_event := c_success;
    EXCEPTION
            WHEN OTHERS THEN
                    p_event := SQLCODE;
    END GetUsers;
END PKG_SAMPLE;
hangum commented 7 years ago

@jeongjaehong 형 이 이슈 형이 맡아줘요. @warnee 네 확인해 보겠습니다.

jeongjaehong commented 7 years ago

올챙이의 에디터창에서 패키지 목록 및 패키지 구현부 내용을 조회하는 쿼리가 정상적으로 실행되는데 오브젝트 브라우져에는 보이지 않는다는게 상황이 이해가 안가긴 하네요..

도커에서 사용할때의 특이사항이 있을까요???

환경을 비슷하게 라도 만들어서 테스트를 해봐야 하는건지...환경에 대해서 다시 한번 설명해 주시겠어요???

오라클 버젼이라든가...

혹시 패키지 생성할때 패키지 몸체 소스를 wrap툴로 암호화 한건 아닌가요? ​

warnee commented 7 years ago

패키지를 배포할때 암호화를 하는 경우도 있는데 지금 테스트 하고 있는 DB 의 경우는 개발 DB 인지라 암호화는 하고 있지 않습니다. 위에서도 언급했었지만 1.7.1 standalone 버전에서 oracle 패키지와 프로시저 목록이 보이고 동일한 DB 에 도커버전으로 다시 접근한 상황입니다.

거기다 패키지를 선택하고 우클릭하여 DDL 보기 를 하면 패키지 내용도 보입니다.

올챙이에서 DB 정보보기로 확인하니 데이터베이스 정보는 하기와 같이 나옵니다. Oracle Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options

hangum commented 7 years ago

@jeongjaehong 부자형 이거 좀~

jeongjaehong commented 7 years ago

@warnee 혹시 jdbc드라이버는 어떤것을 사용하고 계세요?

image

warnee commented 7 years ago

@jeongjaehong 제 사정으로 인해 해당 컴퓨터를 linux -> window로 변경하면서 현재는 docker 타입이 아니라 윈도우 standalone 타입으로 사용하고 있어서 해당 드라이버 정보를 잘 모르겠습니다. 하지만 docker를 사용했던 거기 때문에 jdbc를 따로 설치하거나 하지 않았습니다. docker를 그냥 실행시키기만 한 상태였었습니다.