오라클 SQL 개발자를 사용하여 저장 프로시저를 실행하려면 어떻게 해야 합니까?
EDIT6: * 이것이 (승인된 답변에서) 저에게 도움이 되었습니다.
var ret1 number
var tran_cnt number
var msg_cnt number
var rc refcursor
exec :tran_cnt := 0
exec :msg_cnt := 123
exec get_account(Vret_val => :ret1, Vtran_count => :tran_cnt, Vmessage_count => :msg_cnt, Vaccount_id => 1, rc1 => :rc)
print :tran_cnt
print :msg_cnt
print :rc
SQL Developer는 이것을 매우 어렵게 만듭니다/불가능하게 만드나요?유틸리티가 명령줄 기반이든 상관없이 빠르게 실행하고 볼 수 있기를 원합니다.오류도 잘 포착하면 좋을 것 같습니다.모든 것을 한 번에 지정할 뿐만 아니라 점진적으로(지속적으로) 로그인할 수 있다면 좋을 것입니다(일반적인 ftp/sftp cmd 기반 클라이언트의 작동 방식과 유사).
내 플랫폼은 윈도우즈 서버 2008 + Cygwin입니다.
편집: 파이썬을 사용하여 스크립트를 작성하는 방법을 알고 계십니까?
편집 2: MSFT SQL 서버에서 간단히 다음을 입력할 수 있습니다.
get_user 1;
강조 표시하고 F5를 누르면 다음과 같은 메시지가 표시됩니다.
login name
NULL Somename
출력 창에 인쇄됩니다.Oracle SQL 개발자는 이 문제에 전혀 도움이 되지 않습니다.1을 전달하는 방법과 반환되는 실제 행/레코드를 보는 방법을 잘 모르겠습니다.
EDIT3: 그냥 입력할 때var rc refcursor;
오류가
An error was encountered performing the requested operation:
ORA-00900: invalid SQL statement
00900.00000 - "invalid SQL statement"
* Cause:
* Action:
Vendor code 900Error at Line: 2
EDIT4:
정의가 다음과 같이 시작되는 절차를 실행하려고 합니다.
create or replace procedure get_account
(
Vret_val out number,
Vtran_count in out number,
Vmessage_count in out number,
Vaccount_id IN NUMBER
, rc1 in out sys_refcursor
)as
begin
...
오류가 발생합니다.
Error starting at line 2 in command:
exec :rc := get_account(1)
Error report:
ORA-06550: line 1, column 24:
PLS-00306: wrong number or types of arguments in call to 'GET_ACCOUNT'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
rc
------
나는 매우 가까이에 있습니다... 제발 도와주세요.
편집 5: *
실행 중인 스크립트(기능은 동일), 오류는 항상 동일합니다.
var ret1 number
var tran_cnt number
var msg_cnt number
var rc refcursor
exec :tran_cnt := 0
exec :msg_cnt := 123
exec get_account(Vret_val => :ret1, Vtran_count => :tran_cnt, Vmessage_count => :msg_cnt, Vaccount_id => 1, rc1 => rc)
스크립트 출력(F5의 경우)(여러 실행에서 발생한 여러 메시지일 수 있음):
Error report:
ORA-06550: line 1, column 134:
PLS-00201: identifier 'RC' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
anonymous block completed
anonymous block completed
Error starting at line 7 in command:
exec get_account(Vret_val => :ret1, Vtran_count => :tran_cnt, Vmessage_count => :msg_cnt, Vaccount_id => 1, rc1 => rc)
Error report:
ORA-06550: line 1, column 134:
PLS-00201: identifier 'RC' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
anonymous block completed
anonymous block completed
Error starting at line 7 in command:
exec get_account(Vret_val => :ret1, Vtran_count => :tran_cnt, Vmessage_count => :msg_cnt, Vaccount_id => 1, rc1 => rc)
Error report:
ORA-06550: line 1, column 134:
PLS-00201: identifier 'RC' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
왜 1호선 134열이라고 써있는 거죠?그렇게까지 뻗은 선은 없습니다...
이를 위한 방법이 있을 뿐만 아니라 여러 가지 방법이 있습니다(Pythonic은 아니지만 SQL*Developer는 Java로 작성됨).
는 이: 다음서있절있차습다니가는명이▁with다▁procedure.get_maxsal_by_dept( dno number, maxsal out number)
.
SQL*Developer Object Navigator에서 강조 표시하고 마우스 오른쪽 버튼 메뉴를 호출한 후 Run(실행)을 선택합니다. (+F11를 사용할 수 있습니다.)그러면 테스트 하니스가 있는 팝업 창이 생성됩니다.(참고: 저장 프로시저가 패키지에 있는 경우 프로시저 이름이 포함된 패키지 아래의 아이콘이 아닌 패키지를 마우스 오른쪽 단추로 클릭해야 합니다. 그러면 테스트 하니스가 나타나면 패키지의 "대상" 목록에서 저장 프로시저를 선택합니다.)이 예에서 테스트 하니스는 다음을 표시합니다.
DECLARE
DNO NUMBER;
MAXSAL NUMBER;
BEGIN
DNO := NULL;
GET_MAXSAL_BY_DEPT(
DNO => DNO,
MAXSAL => MAXSAL
);
DBMS_OUTPUT.PUT_LINE('MAXSAL = ' || MAXSAL);
END;
변수 DNO를 50으로 설정하고 OK를 누릅니다.[실행 중] - [로그] 창(닫기/이동/숨기기를 하지 않은 경우 오른쪽 아래 모서리)에서 다음 출력을 볼 수 있습니다.
Connecting to the database apc.
MAXSAL = 4500
Process exited.
Disconnecting from the database apc.
, Cursor를 에 덜 합니다: 공하게말하면자, 자다같기커은반서준환를다기하친니합숙덜능는에과음정주는▁to▁which다니▁is합친▁friendly숙▁runner▁this▁for,:▁one▁cursor▁less▁like▁the▁be▁fair▁functions덜▁a▁ref에▁return기공능,정는.get_emps_by_dept (dno number) return sys_refcursor
.
DECLARE
DNO NUMBER;
v_Return sys_refcursor;
BEGIN
DNO := 50;
v_Return := GET_EMPS_BY_DEPT(
DNO => DNO
);
-- Modify the code to output the variable
-- DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);
END;
하지만 최소한 파일에 대한 변경 사항을 저장할 수 있는 기회를 제공하기 때문에 하네스 조정에 대한 투자를 유지할 수 있습니다.
DECLARE
DNO NUMBER;
v_Return sys_refcursor;
v_rec emp%rowtype;
BEGIN
DNO := 50;
v_Return := GET_EMPS_BY_DEPT(
DNO => DNO
);
loop
fetch v_Return into v_rec;
exit when v_Return%notfound;
DBMS_OUTPUT.PUT_LINE('name = ' || v_rec.ename);
end loop;
END;
동일한 위치의 출력:
Connecting to the database apc.
name = TRICHLER
name = VERREYNNE
name = FEUERSTEIN
name = PODER
Process exited.
Disconnecting from the database apc.
또는 SQL Developer 워크시트에서 이전 SQLPLus 명령을 사용할 수 있습니다.
var rc refcursor
exec :rc := get_emps_by_dept(30)
print rc
이 경우 출력이 스크립트 출력 창에 나타납니다(기본 위치는 결과 탭 오른쪽에 있는 탭).
가장 초기 버전의 IDE는 SQL*Plus 방식을 많이 지원하지 않았습니다.그러나 위의 모든 명령은 1.2.1부터 지원되었습니다.자세한 내용은 온라인 설명서의 매트릭스를 참조하십시오.
" 가그냥입력할때내때▁just할력▁"▁"▁i내입when냥.
var rc refcursor;
GUI)가 "GUI"
워크시트가 SQLPlus 명령을 해석하는 방식에 기능 또는 버그가 있습니다. SQL Plus 명령이 스크립트의 일부라고 가정합니다.SQL*Plus 라인을 입력하면 다음과 같이 말합니다.var rc refcursor
를 클릭합니다.Execute Statement
(또는 ) 워크시트가 ORA-900을 던집니다. 왜냐하면 그것은 실행 가능한 문이 아니기 때문입니다. 즉, SQL이 아니기 때문입니다. 우리가 해야 할 일은Run Script
(또는 ), SQL*Plus의 단일 줄에 대해서도 마찬가지입니다.
"나는 매우 가까이에 있습니다... 제발 도와주세요."
프로그램은 5개의 필수 매개변수 서명을 가진 절차입니다.하나의 매개 변수만 사용하여 함수로 호출하기 때문에 오류가 발생합니다.
exec :rc := get_account(1)
당신에게 필요한 것은 다음과 같은 것입니다.명확한 설명을 위해 명명된 표기법을 사용했습니다.
var ret1 number
var tran_cnt number
var msg_cnt number
var rc refcursor
exec :tran_cnt := 0
exec :msg_cnt := 123
exec get_account (Vret_val => :ret1,
Vtran_count => :tran_cnt,
Vmessage_count => :msg_cnt,
Vaccount_id => 1,
rc1 => :rc )
print tran_count
print rc
즉, 각 OUT 또는 IN OUT 모수에 대한 변수가 필요합니다.IN 파라미터는 리터럴로 전달될 수 있습니다.처음 두 EXEC 문은 두 개의 IN OUT 매개 변수에 값을 할당합니다.세 번째 EXEC가 절차를 호출합니다.프로시저는 함수와 달리 값을 반환하지 않으므로 할당 구문을 사용하지 않습니다.마지막으로 이 스크립트는 OUT 매개 변수에 매핑된 두 변수의 값을 표시합니다.
돌아오는 실제 행/레코드를 어떻게 봐야 할지 모르겠습니다.
저장 프로시저는 레코드를 반환하지 않습니다.선택 문에 대한 포인터인 출력 매개 변수로 커서를 사용할 수 있습니다.그러나 실제로 해당 커서에서 행을 가져오려면 추가 작업이 필요합니다.
SQL Developer에서 다음과 같이 refursor를 반환하는 절차를 실행할 수 있습니다.
var rc refcursor
exec proc_name(:rc)
그런 다음 다음을 실행하면 커서의 결과가 표시됩니다.
print rc
저의 추천은 TORA입니다.
"SQuirrL SQL 클라이언트"에 대해 들어본 적이 있습니까?
http://squirrel-sql.sourceforge.net/
Quest Software, TAD 및 SQL Navigator의 두 가지 가능성이 있습니다.
SQL Navigator(하드웨어 버전): http://www.quest.com/sql-navigator/software-downloads.aspx
언급URL : https://stackoverflow.com/questions/3134923/how-can-i-use-oracle-sql-developer-to-run-stored-procedures
'programing' 카테고리의 다른 글
충돌 분석을 사용하여 치명적이지 않은 예외를 기록하는 방법 (0) | 2023.07.01 |
---|---|
spring-security-saml2를 사용하여 암호화된 주장을 사용하도록 서비스 공급자를 구성하는 방법은 무엇입니까? (0) | 2023.07.01 |
데이터 주석의 As.Net Mvc 숨겨진 필드 (0) | 2023.07.01 |
Git 하위 모듈과의 충돌을 관리하려면 어떻게 해야 합니까? (0) | 2023.06.26 |
UICollection뷰 열 수 설정 (0) | 2023.06.26 |