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

调用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.
                    包的实现创建测试集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 							--创建规范	NOPERSO
				
的创建分为两部分,规范和体。 1、定义:定义部分是为应用程序的接口,声明内数据类型、变量、常量、游标、子程序和异常错误处理等元素,这些元素为的公有元素。 CREATE [OR REPLACE] PACKAGE package_name {IS | AS} [公有数据类型定义] [公有游标声明] [公有变量、常量声明] [公有子程序声明] END [package_name]; 2、主体:主体则是定义部分的具体实现,它定义了定义部分所声明的游标和子
dm和oracle一样,也分为实例数据库两个概念,而且这两者的概念也基本一致。 唯一的区别是:是单进程,而oracle是多进程的。 实例:共享内存+后台的进程或线程。 数据库:存放到磁盘的文件。 一般是一个db对应一个实例,但是DSC(DM共享集群)多个实例对一个数据库dm的服务器组成: 客户端+服务器(实例+数据库) 客户端不能直接去访问数据库,客户端把请求交给实例实例去访问数据库,把访问信息,返回实例实例交给交给客户端。 dm的逻辑存储结构: 数据库由一个或多个表空间组成。 每个表空间由一个或多个数据文件组成。 每个数据文件由一个或多个簇组成。
支持哪些类型的表? 和oracle和相似,在oracle支持的表类型几乎在dm都存在,但不同的是,oracle默认是堆表,而在dm默认是索引组织表,当然这个可以在初始化实例的时候修改。此外,dm还支持临时表,分区表,外部表等。 如何去规划表? 命名:字母开头 a-z,0-9,$#_ 数据类型:int char varchar date clob blob number等等 存储位置:自已的规划表空间 约束(5大约束) 非空,唯一,主键,检查,外键 注释:comment 遵循3范式 案例1:规划一张学员信息表 表名:STU 列:学号(id char(10)),姓名(sname va