[DM] 다몽 데이터베이스에 있는 패키지 실례

15702 단어 데이터베이스
포괄적 실현
테스트 세트 만들기
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(
	ID INT IDENTITY(1,1),
	NAME VARCHAR(50),
	CITY VARCHAR(50)
);
INSERT INTO TEST(NAME,CITY) VALUES('  ','  '),('  ','  '),('  ','  ');

패키지 사양 작성
CREATE OR REPLACE PACKAGE PERSON AS 							--    
	NOPERSON EXCEPTION;											--    
	PERSONCOUNT INT;											--    
	CSR CURSOR;													--    
	PROCEDURE ADDPERSON(NAME VARCHAR(50),CITY VARCHAR(50));		--  
	PROCEDURE REMOVEPERSON(V_NAME VARCHAR(50),V_CITY VARCHAR(50));	--  
	PROCEDURE REMOVEPERSON(V_ID INT);								--  、  
	FUNCTION GETPERSONCOUNT RETURN INT;							--  ,    
	PROCEDURE GETPERSONLIST;									--       
END PERSON;														--    

패키지 바디 생성하기
CREATE OR REPLACE PACKAGE BODY PERSON AS
	PROCEDURE ADDPERSON(NAME VARCHAR(50),CITY VARCHAR(50)) AS
		BEGIN
			INSERT INTO TEST(NAME,CITY) VALUES(NAME,CITY);
			PERSONCOUNT=PERSONCOUNT+SQL%ROWCOUNT;
		END ADDPERSON;
		
	PROCEDURE REMOVEPERSON(V_NAME VARCHAR(50),V_CITY VARCHAR(50)) AS
		BEGIN
			DELETE FROM TEST WHERE NAME LIKE V_NAME AND CITY LIKE V_CITY;
			PERSONCOUNT=PERSONCOUNT-SQL%ROWCOUNT;
		END REMOVEPERSON;
	
	PROCEDURE REMOVEPERSON(V_ID INT) AS
		BEGIN
			DELETE FROM TEST WHERE ID=V_ID;
			PERSONCOUNT=PERSONCOUNT-SQL%ROWCOUNT;
		END REMOVEPERSON;
		
	FUNCTION GETPERSONCOUNT RETURN INT AS
	BEGIN
		RETURN PERSONCOUNT;
	END GETPERSONCOUNT;
	
	PROCEDURE GETPERSONLIST AS
	DECLARE
		V_ID INT;
		V_NAME VARCHAR(50);
		V_CITY VARCHAR(50);
	BEGIN
		IF PERSONCOUNT=0 THEN 
			RAISE NOPERSON;
		END IF;
		OPEN CSR FOR SELECT ID,NAME,CITY FROM TEST;
		LOOP
			FETCH CSR INTO V_ID,V_NAME,V_CITY;
			EXIT WHEN CSR%NOTFOUND;
			PRINT (CAST(V_ID AS VARCHAR(50))||'    '||V_NAME||',  '||V_CITY);
		END LOOP;
		CLOSE CSR;
	END GETPERSONLIST;
BEGIN
	SELECT COUNT(*) INTO PERSONCOUNT FROM TEST;
END PERSON

패키지 다시 컴파일
ALTER PACKAGE PERSON COMPILE;

패키지의 ADDPERSON 프로세스를 호출하고 테이블에 기록을 추가합니다
SQL> CALL PERSON.ADDPERSON('  ','  ');
DMSQL        
    : 1.963(  ).    :1925.
SQL> SELECT * FROM TEST;

         ID          NAME CITY
---------- ----------- ---- ----
1          1                
2          2                
3          3                
4          4                

    : 0.412(  ).    :1926.
SQL>

REMOVEPERSON 프로세스를 호출하여 방금 추가한 레코드를 삭제합니다.
SQL> CALL PERSON.REMOVEPERSON('  ','  ');
DMSQL        
    : 13.914(  ).    :1979.
SQL> SELECT * FROM TEST;

         ID          NAME CITY
---------- ----------- ---- ----
1          1                
2          2                
3          3                

    : 0.159(  ).    :1980.

REMOVEPERSON 프로세스 재부팅, 예를 들어 전송 ID가 로운을 삭제함
SQL> CALL PERSON.REMOVEPERSON(3);
DMSQL        
    : 49.736(  ).    :1989.
SQL> SELECT * FROM TEST;

         ID          NAME CITY
---------- ----------- ---- ----
1          1                
2          2                

    : 0.342(  ).    :1990.

패키지의 변수를 인용하여 총 인원수를 얻습니다
SQL> SELECT PERSON.PERSONCOUNT;

         PERSON.PERSONCOUNT
---------- ------------------
1          2

    : 0.867(  ).    :1991.

패키지의 함수를 호출하여 총 인원수를 얻습니다
SQL> SELECT PERSON.GETPERSONCOUNT;

         GETPERSONCOUNT
---------- --------------
1          2

    : 0.623(  ).    :1992.

GETPERSONLIST 프로세스를 호출하여 테이블의 세부내용 보기
SQL> CALL PERSON.GETPERSONLIST;
1      ,    
2      ,    

DMSQL        
    : 0.290(  ).    :1995.

좋은 웹페이지 즐겨찾기