저장 프로세스 및 저장 함수

3894 단어 데이터베이스
1. 저장 프로세스와 저장 함수의 차이점:
1. 본질이 같고 차이가 없다
2. 함수의 존재는 프로세스를 호출하는 것이고 저장 프로세스 내부는 저장 함수를 호출하는 것이다.
3. 저장 함수는 sql 문장에서 select 함수from 표 이름과 같이 직접 호출할 수 있다
4. 저장 프로세스가 실현할 수 있는 것은 저장 함수도 모두 실현할 수 있고 저장 함수도 실현할 수 있으며 저장 프로세스도 모두 실현할 수 있다.
5. 저장 과정 중 반환 값이 없을 수도 있고 여러 개가 있을 수도 있지만 저장 함수 중 하나의return을 강제로 반환할 수 있다
 
2. 저장 프로세스와 저장 함수 생성
저장 프로세스는 저장 함수가 만든 문법과 유사하다
create [or replace]에서 or replace는 선택할 수 있는 매개 변수로 같은 이름의 함수/프로세스 덮어쓰기 업데이트가 존재하고 존재하지 않으면 만듭니다. 일반적으로 만들 때 사용하지 않는 것을 추천하지 않습니다. 기존의 삭제를 방지합니다.
프로세스/함수 이름 뒤에 있는 매개 변수 이름 in | out 매개 변수 형식 in은 입력을 표시하고 out표는 출력입니다
is ...
begin
...
end;
전통적인plsql프로그래밍과 유사하며 is 후 매개 변수 변수를 정의하고begin은 주류 프로그래밍을 작성하며end는 끝을 나타낸다.
/*
      
  create [or replace] procedure      (  1 in | out     ,  1 in | out     )
  is 
         
  begin
      ...
  end;
*/

/*
      
  create [or replace] function    (  1 in     ,  1 in     ) return      
  is | as
         
  begin
          
  end;
    
*/

3. 저장 프로세스와 저장 함수의 사례
eg 예:
--   empno emp       
create or replace function fun_getsumsal(vempno in number) return number
is
  vsumsal number;
begin
  select sal*12 + nvl(comm,0) into vsumsal from emp where empno = vempno;
  return vsumsal;
end;

-- plsql    
declare

begin
  dbms_output.put_line(fun_getsumsal(7369));
end;


--         
create procedure proc_gettotalsal(vempno in number,totalsal out number)
is

begin
  select sal*12 + nvl(comm,0) into totalsal from emp where empno = vempno;
end;

-- plsql    
declare
  total number;
begin
  proc_gettotalsal(7369,total);
  dbms_output.put_line(total);
end;

4.java 코드 호출 저장 프로세스와 저장 함수
자바 호출 방법은 jdbc에서 데이터베이스를 연결하고 conn.prepareCall(sql)의 이 방법을 통해 저장 프로세스와 저장 함수를 호출하는 것과 유사하다.
다른 ql 쓰기 방식
저장 프로세스:String sql = "{call proc gettotalsal(?,?)}"{call 저장 프로세스 이름(?,?)}반환값 없음
저장 함수:String sql = "{?= call proc gettotalsal(?)}"{?= call 저장 프로세스 이름(?)}반환값 있음
? 후속conn.prepareCall(sql)입니다.가져온 Callable Statement:statement는 파라미터 설정을 하고 입력은 set 방법을 직접 사용할 수 있으며 출력은statement를 사용합니다.register OutParameter(int num, OracleTypes.NUMBER) 방법, 첫 번째 매개 변수 코드 코드는?색인, 즉 몇 번째, 두 번째 매개 변수 코드의 출력 가치 유형.
(1) 메모리 프로세스 호출
@Test
	public void demo1() throws Exception {
		//    
		Class.forName("oracle.jdbc.driver.OracleDriver");
		//    
		String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
		String username = "jzxy";
		String password = "jzxy";
		Connection conn = DriverManager.getConnection(url, username, password);
		//    SQL statement.          proc_gettotalsal       
		String sql = "{call proc_gettotalsal(?,?)}";
		CallableStatement statement = conn.prepareCall(sql);
		//       
		statement.setInt(1, 7369);
		//       
		statement.registerOutParameter(2, OracleTypes.NUMBER);
		//   
		statement.execute();
		//      
		int total = statement.getInt(2);
		System.out.println(total);
		//     
		statement.close();
		conn.close();
		
	}

(2) 메모리 함수 호출
@Test
	public void demo2() throws Exception {
		//    
		Class.forName("oracle.jdbc.driver.OracleDriver");
		//    
		String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
		String username = "jzxy";
		String password = "jzxy";
		Connection conn = DriverManager.getConnection(url, username, password);
		//    SQL statement.          proc_gettotalsal       
		String sql = "{? = call fun_getsumsal(?)}";
		CallableStatement statement = conn.prepareCall(sql);
		//       
		statement.registerOutParameter(1, OracleTypes.NUMBER);
		//       
		statement.setInt(2, 7369);
		
		//   
		statement.execute();
		//      
		int total = statement.getInt(1);
		System.out.println(total);
		//     
		statement.close();
		conn.close();
		
	}

 
 
 
 

좋은 웹페이지 즐겨찾기