[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:



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;
/



@Alex Poole이 응답을 얻지 못했습니다. 그러나 시행 착오를 통해 SQL Developer 버전 3.0.04를 사용하여 다음 작업을 발견했습니다. 다른 사람들에게 도움이 될 수 있도록 여기에 게시하십시오.

SET serveroutput on;

DECLARE
    var InParam1 number;
    var InParam2 number;
    var OutParam1 varchar2(100);
    var OutParam2 varchar2(100);
    var OutParam3 varchar2(100);
    var OutParam4 number;

BEGIN
    /* Assign values to IN parameters */
    InParam1 := 33;
    InParam2 := 89;

    /* Call procedure within package, identifying schema if necessary */
    schema.package.procedure(InParam1, InParam2,
        OutParam1, OutParam2, OutParam3, OutParam4);

    /* Display OUT parameters */
    dbms_output.put_line('OutParam1: ' || OutParam1);
    dbms_output.put_line('OutParam2: ' || OutParam2);
    dbms_output.put_line('OutParam3: ' || OutParam3);
    dbms_output.put_line('OutParam4: ' || OutParam4);
END;



이 다른 대답들 중 어느 것도 나를 위해 일하지 않았다. 다음은 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 를 사용하지 않습니다.

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




var out_para_name refcursor; 
execute package_name.procedure_name(inpu_para_val1,input_para_val2,... ,:out_para_name);
print :out_para_name;



SQL Developer에서 프로 시저를 열고 거기에서 실행하십시오. SQL Developer는 실행되는 SQL을 표시합니다.

BEGIN
  PROCEEDURE_NAME_HERE();
END;



Links