ORACLE PL/SQL 对象(object)学习笔记(二)
4、对象依赖性
CREATE OR REPLACE TYPE Obj1 AS OBJECT (
f1 NUMBER,
f2 VARCHAR2(10),
f3 DATE
);
/
CREATE OR REPLACE TYPE Obj2 AS OBJECT (
f1 DATE,
f2 CHAR(1)
);
/
CREATE OR REPLACE TYPE Obj3 AS OBJECT (
a Obj1,
b Obj2
);
/
OBJ3依赖于OBJ1和OBJ2。所以删除或修改OBJ1或OBJ2之前没有首先删除OBJ3是非法的。
5、对象标识符和对象引用
对象标识符(object identifier ,简称为OID)是某种类型的永久对象的唯一定位符。与ROWID变量相类似(它唯一的标识了一行),对象标识符唯一标识了一个对象。
我们知道,REF CURSOR变量与CURSOR变量是不同的,它仅仅是指向一个游标的指针。对象引用也是一样。对象引用是一个指向对象的指针,而不是对象本身。在声明部分或表定义中声明对象引用的语法是:
Variable_name REF object_type;
这里Variable_name是对象引用的名字,而object_type是对象类型。
例如下面定义的ClassObj类型包含一个指向RoomObj的引用:
CREATE OR REPLACE TYPE ClassObj AS OBJECT (
department CHAR(3),
course NUMBER(3),
description VARCHAR2(2000),
max_students NUMBER(3),
current_students NUMBER(3),
num_credits NUMBER(1),
room REF RoomObj
);
/
6、在DML语句中使用对象
1)INSERT
在需要使用对象的INSERT 语句中, 你可以使用对象构造函数,或者一个对象的PL/SQL变量,它们都包含了要插入的对象。对于INSERT语句而言,对象的行为方式和标量类型是很相似的。
2)UPDATE
在UPDATE语句中的WHERE或VALUES子句中,对象可以被用作联编变量。
下面的块创建了一个新的房间,并更新classes表以反映新插入的数值。
DECLARE
v_NewRoom RoomObj :=
RoomObj(99990, 'Building 7', 200, 50, 'Discussion Room F');
v_RoomRef REF RoomObj;
BEGIN
-- The RETURNING clause on this statement puts a reference to the
-- newly inserted room into v_RoomRef.
INSERT INTO rooms r VALUES (v_NewRoom)
RETURNING REF(r) INTO v_RoomRef;
UPDATE classes
SET room = v_RoomRef
WHERE department = 'NUT'
相关文档:
卸载SQL Server 2005的方法之一,放在这儿只是为了记住:
1:把SQL Server2005的安装盘(安装文件)放入到光驱。
2:打开如下路径:开始/运行,输入:cmd
3:输入下列命令:
Start /wait \setup.exe /qb REMOVE=ALL INSTANCENAME=:管区盘符,例如:G:、H:等;:安装的SQLServer实例名称,默认值为:功能 ......
using System;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true,IsPrecise = true)]
public static bool RegExIsMatch(string pattern,string matchString)
{
......
PL/SQL: Oracle中的SQL过程化编程语言
1. PL/SQL程序是由块结构构成,格式如下:
[DECLARE
--声明部分
]
BEGIN
-- 主体
[EXCEPTION
-- 异常处理块
]
END;
/ --块的结束
2.变量
简单变量: ......
包由包规范和包体两部分组成。
1、包规范(Package Specification)
包规范,也叫做包头,包含了有关包的内容的信息。但是,它不包含任何过程的代码。
创建包头的语法一般如下
CREATE [OR REPLACE] PACKAGE package_name {IS | AS}
Procedure_name | function_name | variable_declaration | type_def ......