[Oracle] SQL Developer에서 저장 프로 시저 실행?


Answers

쉬운 실행. 결과를 얻는 것은 어려울 수 있습니다.

오라클 패키지 프로 시저의 결과를 얻으려면 가장 좋은 방법 / 도구를 물어 본이 질문을 살펴보십시오.

그것의 요약은 이렇게 간다.

mypackage라는 패키지와 getQuestions라는 프로 시저가 있다고 가정합니다. refcursor를 반환하고 문자열 사용자 이름을 사용합니다.

새 SQL 파일 (새 파일)을 작성하기 만하면됩니다. 연결을 설정하고 다음에 붙여 넣기하십시오.

var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;
Question

나는 여러 개의 매개 변수가있는 저장 프로 시저를 실행하려고합니다. 프로 시저는 내 Connections 패널에서만 다른 사용자 | | 패키지 | |

마우스 오른쪽 버튼을 클릭하면 메뉴 항목이 "주문 회원 ..."및 "단위 테스트 만들기"(회색으로 표시됨)입니다. 프로 시저를 "실행"하는 기능은 사용자가 액세스 할 때 가능하지 않습니다.

SQL 파일로 프로 시저를 실행할 수 있도록 익명 블록을 만드는 방법에 대한 예제를 찾으려고 노력했지만 작동하지 않는 것은 찾지 못했습니다.

누구든지 SQL Developer에서이 절차를 어떻게 실행할 수 있는지 알고 있습니까? 버전 2.1.1.64를 사용 중입니다.

미리 감사드립니다!

편집 1 :

호출하려는 프로 시저에는 다음 시그니처가 있습니다.

user.package.procedure(
   p_1 IN  NUMBER,
   p_2 IN  NUMBER,
   p_3 OUT VARCHAR2,
   p_4 OUT VARCHAR2,
   p_5 OUT VARCHAR2,
   p_6 OUT NUMBER)

다음과 같이 익명 블록을 작성하면

DECLARE
   out1 VARCHAR2(100);
   out2 VARCHAR2(100);
   out3 VARCHAR2(100);
   out4 NUMBER(100);
BEGIN
   EXECUTE user.package.procedure (33,89, :out1, :out2, :out3, :out4);
END;

오류가 발생했습니다.

Bind Varialbe "out1" is NOT DECLCARED
anonymous block completed

out * 변수 초기화를 시도했습니다.

   out1 VARCHAR2(100) := '';

하지만 같은 오류가 발생합니다 :

편집 2 :

Alex의 대답에 따라 필자는 params 앞에서 콜론을 제거하고 다음과 같이 시도했습니다.

Error starting at line 1 in command:
DECLARE
   out1 VARCHAR2(100);
   out2 VARCHAR2(100);
   out3 VARCHAR2(100);
   out4 NUMBER(100);
BEGIN
   EXECUTE user.package.procedure (33,89, out1, out2, out3, out4);
END;
Error report:
ORA-06550: line 13, column 17:
PLS-00103: Encountered the symbol "USER" when expecting one of the following:

   := . ( @ % ; immediate
The symbol ":=" was substituted for "USER" to continue.
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:



SqlDeveloper 3 이상을 사용하는 분들을 위해 :

SqlDeveloper에는 저장된 proc / function을 직접 실행하는 기능이 있으며 출력은 읽기 쉬운 방식으로 표시됩니다.

패키지 / 저장된 proc / stored 함수를 마우스 오른쪽 버튼으로 클릭하고 Run 클릭하고 Run target proc / func로 target 을 선택하면 SqlDeveloper는 실행할 코드 스 니펫을 생성합니다 (입력 매개 변수를 넣을 수 있도록). 실행 된 후에는 출력 매개 변수가 대화 상자의 아래쪽 절반에 표시되고 참조 커서에 대한 지원이 기본 제공됩니다. 커서 결과가 별도의 출력 탭으로 표시됩니다.




Pl / SQL 블록을 작성하는 것은 매개 변수가 많은 프로 시저가 많은 경우 고통 스러울 수 있습니다. 파이썬으로 작성된 응용 프로그램 이 있습니다. 그것은 프로 시저 선언으로 파일을 구문 분석하고 편리한 프로 시저 호출을위한 웹 응용 프로그램을 만듭니다.




이 다른 대답들 중 어느 것도 나를 위해 일하지 않았다. 다음은 SQL Developer 3.2.20.10에서 프로 시저를 실행하기 위해 수행해야하는 작업입니다.

SET serveroutput on;
DECLARE
  testvar varchar(100);
BEGIN
  testvar := 'dude';
  schema.MY_PROC(testvar);
  dbms_output.enable;
  dbms_output.put_line(testvar);
END;

그리고 나서 프로 시저가 전달 된 변수로 무엇을해야하는지 테이블을 확인해야합니다. 출력은 변수가 값을 받았다는 것을 확인하고 (이론적으로는 프로 시저에 전달했습니다) 확인할 것입니다.

참고 사항 (광산과 다른 점)

  • 아니요 : 변수 이름 이전
  • .package. 하지 .package. 또는. .packages. 스키마 이름과 프로 시저 이름 사이
  • 변수의 값에 & 를 넣을 필요가 없습니다.
  • 어디서나 print 사용 안함
  • 변수를 선언 할 때 var 를 사용하지 않습니다.

이 모든 문제로 인해 가장 오랫동안 내 머리를 긁적이게되었고, 이러한 심각한 오류가 나왔고 타르와 깃털이 남았습니다.




SQL Developer 버전 4.0.2.15 Build 15.21을 사용하면 다음과 같은 작업이 가능합니다.

SET SERVEROUTPUT ON
var InParam1 varchar2(100)
var InParam2 varchar2(100)
var InParam3 varchar2(100)
var OutParam1 varchar2(100)

BEGIN
    /* Assign values to IN parameters */
    :InParam1 := 'one';
    :InParam2 := 'two';
    :InParam3 := 'three';

    /* Call procedure within package, identifying schema if necessary */
    schema.package.procedure(:InParam1, :InParam2, :InParam3, :OutParam1);
    dbms_output.enable;
    dbms_output.put_line('OutParam1: ' || :OutParam1);
END;
/