developer tip

SQL Developer에서 저장 프로 시저를 실행 하시겠습니까?

copycodes 2020. 10. 19. 08:12
반응형

SQL Developer에서 저장 프로 시저를 실행 하시겠습니까?


여러 입력 및 출력 매개 변수가있는 저장 프로 시저를 실행하려고합니다. 절차는 내 연결 패널에서 다른 사용자 | | 패키지 | |

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

프로 시저를 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의 답변에 따라 매개 변수 앞에서 콜론을 제거하고 다음을 얻었습니다.

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:

간단한 매개 변수 유형 (예 : refcursors 등이 아님)으로 다음과 같이 할 수 있습니다.

SET serveroutput on;
DECLARE
    InParam1 number;
    InParam2 number;
    OutParam1 varchar2(100);
    OutParam2 varchar2(100);
    OutParam3 varchar2(100);
    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;
/


OP의 사양을 사용하고 :var바인드 변수 를 활용하는 대체 접근 방식을 사용하도록 편집 되었습니다 .

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

-- Display OUT parameters
print :OutParam1;
print :OutParam2;
print :OutParam3;
print :OutParam4;

쉽게 실행합니다. 결과를 얻는 것은 어려울 수 있습니다.

오라클 패키지 절차에서 결과를 얻는 최선의 방법 / 도구를 요청한이 질문을 살펴보십시오.

요약은 다음과 같습니다.

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

새 SQL 파일 (새 파일)을 작성하기 만하면됩니다. 연결을 설정하고 다음과 같이 붙여넣고 실행합니다.

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

SqlDeveloper 3+를 사용하는 경우, 놓친 경우 :

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

바로 패키지 / proc 디렉토리에 저장 / 저장 기능을 클릭에 클릭 Run선택 target(당신이 당신의 입력 매개 변수를 넣을 수 있도록) 실행하려는 FUNC, SqlDeveloper 실행하는 코드를 생성 / proc 디렉토리로. 일단 실행되면 출력 매개 변수가 대화 상자의 하단에 표시되고 참조 커서에 대한 지원도 내장되어 있습니다. 커서의 결과는 별도의 출력 탭으로 표시됩니다.


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

BEGIN
  PROCEEDURE_NAME_HERE();
END;

사용하다:

BEGIN

  PACKAGE_NAME.PROCEDURE_NAME(parameter_value, ...);

END;

"PACKAGE_NAME", "PROCEDURE_NAME"및 "parameter_value"를 필요한 것으로 바꿉니다. OUT 매개 변수는 이전에 선언되어야합니다.


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

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

참고 (나와 다른 사람과의 차이점) :

  • :변수 이름 앞에 없음
  • 스키마 이름과 프로 시저 이름 사이 .package.넣거나 넣지 않음.packages.
  • &변수의 값에 를 넣을 필요가 없습니다 .
  • print어디서나 사용하지 않음
  • No using var to declare the variable

All of these problems left me scratching my head for the longest and these answers that have these egregious errors out to be taken out and tarred and feathered.


Though this question is quite old, I keep stumbling into same result without finding an easy way to run from sql developer. After couple of tries, I found an easy way to execute the stored procedure from sql developer itself.

  • Under packages, select your desired package and right click on the package name (not on the stored procedure name).

  • You will find option to run. Select that and supply the required arguments. Click OK and you can see the output in output variables section below

I'm using SQL developer version 4.1.3.20


Can't believe, this won't execute in SQL Developer:

var r refcursor;
exec PCK.SOME_SP(:r,
 '02619857');

print r;

BUT this will:

var r refcursor;
exec TAPI_OVLASCENJA.ARH_SELECT_NAKON_PRESTANKA_REG(:r, '02619857');

print r;

Obviously everything has to be in one line..


Using SQL Developer Version 4.0.2.15 Build 15.21 the following works:

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

I wasn't able to get @Alex Poole answers working. However, by trial and error, I found the following works (using SQL Developer version 3.0.04). Posting it here in case it helps others:

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;

--for setting buffer size needed most of time to avoid `anonymous block completed` message
set serveroutput on size 30000;

-- declaration block in case output need to catch
DECLARE
--declaration for in and out parameter
  V_OUT_1 NUMBER;
  V_OUT_2 VARCHAR2(200);
BEGIN

--your stored procedure name
   schema.package.procedure(
  --declaration for in and out parameter
    V_OUT_1 => V_OUT_1,
    V_OUT_2 => V_OUT_2
  );
  V_OUT_1 := V_OUT_1;
  V_OUT_2 := V_OUT_2;
  -- console output, no need to open DBMS OUTPUT seperatly
  -- also no need to print each output on seperat line 
  DBMS_OUTPUT.PUT_LINE('Ouput => ' || V_OUT_1 || ': ' || V_OUT_2);
END;

Creating Pl/SQL block can be painful if you have a lot of procedures which have a lot of parameters. There is an application written on python that do it for you. It parses the file with procedure declarations and creates the web app for convenient procedure invocations.


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

참고URL : https://stackoverflow.com/questions/3991721/run-stored-procedure-in-sql-developer

반응형