2017-02-11 3 views
0

Oracle에서 저장 프로 시저를 만들고 있는데 그 중 하나는 영구적으로 만들어지고 다른 하나는 임시 목적으로 제공되고 사라집니다. 어떻게 작동하는지 안내하고 사용 방법을 알려주십시오 만들어진.임시 및 영구 저장 프로 시저

---- 이것은이 DB에서 생성

create PROCEDURE printVal (name varchar2) IS 
BEGIN 
    dbms_output.put_line ('name:' || name); 
END; 
+0

내가 처음 익명 블록 (A PL/SQL [서브]를 포함하고 있기 때문에 당신이 혼란스러워 생각 https://docs.oracle.com/cloud/latest /db112/LNPLS/subprograms.htm#LNPLS008), 이름 (printVal)을 정의합니다. 그러나 익명 블록 안에 있기 때문에 DB에 저장되지 않습니다. – tbone

+0

답장과 답장을 보내 주셔서 감사합니다. – sunleo

답변

4

이해하려면 SQL을 두 부분으로 나누십시오.

저장 프로 시저 :

  • 저장 프로 시저가 데이터베이스에 저장됩니다.
  • 생성 후 언제든지 저장 프로 시저를 호출 할 수 있습니다.
  • 저장 프로시 저는 입력 출력 매개 변수도 지원합니다.

익명 블록 :이 익명 PL/SQL 블록입니다

  • .
  • 익명 블록은 데이터베이스에 저장되지 않습니다.
  • 이 paramters
를 통과 할 수 없습니다
---------- Stored Procedure Start-------- 

DECLARE name varchar2(10); 
PROCEDURE printVal (name varchar2) IS 
BEGIN 
    dbms_output.put_line ('name:' || name); 
END; 
--------- Stored Procedure End----------- 

----------anonymous block Start---------- 
BEGIN 
    name := 'Joe'; 
    printVal(name); 
END; 
/
----------anonymous block end ------------ 
+0

무슨 뜻입니까? 매개 변수를 전달할 수 없습니까? 여기 첫 번째 예에서 SP에 값을 전달하면 임시로 생성됩니다. – sunleo

+0

"매개 변수를 전달할 수 없습니다"- 저장 프로 시저에서 정의한 것처럼 익명 블록에서 입력 출력 매개 변수를 정의 할 수 없습니다. – Tajinder

+0

예제의 프로 시저가 저장되지 않으므로 저장 프로 시저가 아닙니다. '/'문자는 일부 클라이언트 도구에서만 PL/SQL 언어의 일부가 아닌 입력 끝과 실행 명령을 나타내는 데 필요하다는 것을 언급 할 가치가 있습니다. –

3

음, 분명히이 영구적으로 사용할 수있다 ---- 단지 일시적으로 생성, DB에서 생성

DECLARE name varchar2(10); 
PROCEDURE printVal (name varchar2) IS 
BEGIN 
    dbms_output.put_line ('name:' || name); 
END; 
BEGIN 
    name := 'Joe'; 
    printVal(name); 
END; 
/

를 사라되지 않는다 다른 구문입니다 - 첫 번째는 익명 블록이고 두 번째는 저장 프로 시저를 만듭니다. 예상되는 동작은 정확히 사용자가 관찰 한 것이며 Oracle PL/SQL 설명서의 적용을받습니다. https://docs.oracle.com/cloud/latest/db112/LNPLS/overview.htm#LNPLS141