ORACLE PL/SQL 对象(object)学习笔记(一)
1、对象类型规范
创建对象类型规范的语法如下
CREATE [OR REPLACE] TYPE [schema.] type_name
[AUTHID {CURRENT_USER|DEFINER}] AS OBJECT (
Attribute1 datatype,
[attribute2 datatype,…]
[method 1]
[method 2]);
/
其中AUTHID指示将来执行该方法时,必须使用在创建时定义的CURRENT_USER或DEFINER的权限集合。CURRENT_USER是调用该方法的用户,DEFINER是该对象类型的所有者。
1)属性
属性的声明有一些限制,包括:
属性的声明必须出现在方法的声明以前。
数据类型可以是任何数据库数据类型,但是不能包括ROWID,UROWID,LONG,LONG RAW,NCHAR,NCLOB,NVARCHAR2类型,以及PL/SQL的专用类型或在PL/SQL包中定义的类型。
不能使用那些只能在PL/SQL中使用而不能在数据库中使用的数据类型。这些类型包括BINARY_INTEGER,BOOLEAN,PLS_INTEGER,RECORD和REF CURSOR。
不能使用NOT NULL约束,但是可以通过在对象实例上定义一个数据库触发器来达到相同效果。
属性列表中至少必须有一个属性。
不能使用默认值。
注意:不能直接在属性或对象类型上使用%TYPE和%ROWTYPE。但是可以在对象实例的属性上使用它们。
-- This example works fine. %TYPE is applied
-- to the variable, not the object type.
DECLARE
v_discount_price discount_price_obj;
v_price v_discount_price.price%TYPE;
BEGIN
NULL;
END;
/
-- This example throws an exception. %TYPE is applied
-- directly to the object type.
DECLARE
v_price discount_price_obj.price%TYPE;
BEGIN
NULL;
END;
/
复合对象类型
复合对象类型可以以某个属性的数据类型的形式,包含另一个对象类型。
CREATE OR REPLACE TYPE discount_price_obj AS OBJECT (
discount_rate NUMBER(10,4),
price NUMBER(10,2),
MEMBER FUNCTION discount_price RETURN NUMBER)
INSTANTIABLE
FINAL;
/
CREATE OR REPLACE TYPE inventory_obj AS OBJECT (
item_id NUMBER(10),
num_in_stock NUMBER(10),
reorder_status VARCHAR2(20),
price REF discount_price_obj);
/
2)方法
方法就是�
相关文档:
1. 当前系统日期、时间
select getdate()
2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值
例如:向日期加上2天
&nbs ......
一.按英文字母排序:
select * from table order by nlssort(name,'NLS_SORT=schinese_pinyin_M');
二. 写一个SQL语句,查询选修了5门课程的学生学号和姓名(9分钟)
答:SQL语句如下:
select stu.sno, stu.sname
from student stu
where (select count(*) from s ......
因为要根据很复杂的规则处理用户数据,所以这里用到数据库的游标。平时不怎么用这个,写在这里纯粹为自己备个忘。
--将学籍号重复的放入临时表 tmp_zdsoft_unitive_code(除高中学段外)
drop table tmp_zdsoft_unitive_code;
select s.id ,sch.school_code,sch.school_name,s.student_name,s.unitive_code,s.identity_car ......
问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- --- ......
第一题:
为管理业务培训信息,建立3个表:
S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄
C(C#,CN)C#,CN分别代表课程编号,课程名称
SC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩
(1)使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?
(2) ......