개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.04 21:27

dba_popen 함수 사용 시 오류 발생

목록
  • PHP장인 오래 전 2025.06.04 21:27 인기
  • 135
    1
저는 현재 Oracle DBA_popen 함수를 사용하여 shell 명령어를 실행하는 방법에 대해 공부 중입니다.

dba_popen 함수는 Oracle 내부에서 shell 명령어를 실행하기 위해 사용되는 함수입니다.

이 함수는 Oracle 11g 버전부터 사용 가능합니다.

다만, 저는 다음과 같은 오류를 발생시키는 코드를 작성했는데 오류가 발생하는 이유를 모르겠습니다.

sql

BEGIN

  DBMS_OUTPUT.PUT_LINE(dba_popen('ls -l', 'r'));

END;



위 코드를 실행하면 오류 메시지가 다음과 같이 출력됩니다.

ORA-12537: TNS:적절한 서비스 이름이 없습니다.

저는 Oracle 서비스 이름을 확인했는데도 오류가 계속 발생하고 있습니다.

dba_popen 함수를 사용할 때 어떤 조건이 필요하며, 오류가 발생하는 이유를 알려주시면 감사하겠습니다.

또한, dba_popen 함수를 사용하여 shell 명령어를 실행할 때, shell 명령어를 실행한 결과를 Oracle에 저장하는 방법을 알려주시면 감사하겠습니다.

예를 들어, dba_popen 함수를 사용하여 shell 명령어 'ls -l'를 실행한 결과를 Oracle의 테이블에 저장하는 방법을 알려주시면 감사하겠습니다.

이러한 정보를 알려주시면 공부에 많은 도움이 될 것입니다.

감사합니다.

    댓글목록

    profile_image
    나우호스팅  오래 전



    dba_popen 함수는 Oracle 내부에서 shell 명령어를 실행하기 위해 사용되는 함수입니다. 이 함수는 Oracle 11g 버전부터 사용 가능합니다.

    오류가 발생하는 이유는 dba_popen 함수가 Oracle 서비스 이름을 찾을 수 없기 때문입니다. Oracle 서비스 이름을 확인했는데도 오류가 계속 발생하는 이유는 Oracle 서비스 이름이 올바르게 구성되지 않았거나, Oracle 서비스 이름이 올바르게 등록되지 않았을 수 있습니다.

    dba_popen 함수를 사용할 때는 Oracle 서비스 이름을 올바르게 구성하고, Oracle 서비스 이름을 올바르게 등록해야 합니다. 또한, dba_popen 함수를 사용할 때는 shell 명령어를 실행한 결과를 Oracle에 저장하기 위해 UTL_FILE 패키지를 사용할 수 있습니다.

    UTL_FILE 패키지를 사용하여 shell 명령어를 실행한 결과를 Oracle의 테이블에 저장하는 방법은 다음과 같습니다.

    1. UTL_FILE 패키지를 사용하여 shell 명령어를 실행한 결과를 Oracle의 파일에 저장합니다.
    2. Oracle의 파일을 읽어 Oracle의 테이블에 저장합니다.

    다음은 예제를 포함한 코드입니다.

    #hostingforum.kr
    sql
    
    BEGIN
    
      DBMS_OUTPUT.PUT_LINE(dba_popen('ls -l', 'r'));
    
    
    
      -- UTL_FILE 패키지를 사용하여 shell 명령어를 실행한 결과를 Oracle의 파일에 저장합니다.
    
      DECLARE
    
        l_file UTL_FILE.FILE_TYPE;
    
      BEGIN
    
        l_file := UTL_FILE.FOPEN('shell_command_output.txt', 'w');
    
        UTL_FILE.PUT_LINE(l_file, dba_popen('ls -l', 'r'));
    
        UTL_FILE.FCLOSE(l_file);
    
      END;
    
    
    
      -- Oracle의 파일을 읽어 Oracle의 테이블에 저장합니다.
    
      DECLARE
    
        l_file UTL_FILE.FILE_TYPE;
    
        l_line VARCHAR2(32767);
    
      BEGIN
    
        l_file := UTL_FILE.FOPEN('shell_command_output.txt', 'r');
    
        LOOP
    
          BEGIN
    
            l_line := UTL_FILE.GET_LINE(l_file);
    
            INSERT INTO shell_command_output (output) VALUES (l_line);
    
          EXCEPTION
    
            WHEN UTL_FILE.END_OF_FILE THEN
    
              EXIT;
    
          END;
    
        END LOOP;
    
        UTL_FILE.FCLOSE(l_file);
    
      END;
    
    END;
    
    


    이러한 코드를 사용하여 shell 명령어를 실행한 결과를 Oracle의 테이블에 저장할 수 있습니다.

    2025-06-04 21:28

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,623건 / 87 페이지

검색

게시물 검색