ORACLE SGA之数据缓冲区(Data Buffer)
暨上通过预编译阐述道共享池最后到SGA,这里进一步说明一下SGA中另一个大块,数据缓冲区,携带提及一点数据文件和表空间,后续专门会说明这块。
首先了解下SGA种大致有那些东西,这些东西随着数据库版本的增加会有所增加,不过大致上应该一致,这也是基本所有的体系结构都会描述的东西:
在认识数据缓冲区前,先记住几个常用的视图:
X$BH、GV$BH、V$BH、V$FIXED_TABLE、V$FIXED_VIEW_DEFINITION、DICT、DICT_COLUMNS。
以及两个包:DBMS_SPACE 和 DBMS_ROWID的一些常用内容,在后面会逐渐用到时说明部分使用方式,不过还是先要创建一个表,不然什么测试工作也做不了:
在一个用户下创建一个表:
CREATE TABLE TEST_OBJECTS
AS SELECT * from USER_OBJECTS;
如果那个用户下没有什么对象,那就多复制几次数据,才能填充一些数据,数据成倍增长:
INSERT INTO TEST_OBJECTS
SELECT * from TEST_OBJECTS;
COMMIT;
此时第一个,常规使用下,一个常用的对象就是ROWID,那么看下它由哪几部分组成:
对象编号、文件编号、文件内块号、块内部行号码,我们看下一张表内部每条数据的这些信息:
SQL>SELECT dbms_rowid.rowid_relative_fno(ROWID) "文件编号",
dbms_rowid.rowid_object(ROWID) "对象编号",
dbms_rowid.rowid_block_number(ROWID) "块编号",
dbms_rowid.rowid_row_number(ROWID) "块内部行号码"
from TEST_OBJECTS t;
文件编号 对象编号 块编号 块内部行号码
---------- ---------- ---------- ------------
4 54646 588 0
4 54646 588 1
4 54646 588  
相关文档:
INTERVAL YEAR TO MONTH数据类型
Oracle语法:
INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]
该数据类型常用来表示一段时间差, 注意时间差只精确到年和月. precision为年或月的精确域, 有效范围是0到9, 默认值为2.
eg:
INTERVAL '123-2' YEAR(3) TO MONTH & ......
create or replace type mytype IS TABLE OF varchar2(20);
declare type1 mytype :=mytype('1','2','3','4');
i number:=1;
var_str varchar(20):='liaomin';
begin
type1.EXTEND;
type1(type1.COUNT):=var_str;
loop
dbms_output.put_line(type1(i));
i:=i+1;
exit when i=type1.count+1; ......
在初学Oracle时,写了一个存储过程,名称是:PROC_GET_BILL,三个参数,第1,3是in参数,第2是out参数,写完之后,想测一下,结果发现网上有多种方式(其重要是下面这两种,只是写法不同而已),刚开始把两种变量定义方式搞错了,一直执行不过,经慢慢尝试,得到了下面两种写法,希望像我这样初学者少走弯路,直接搞清两种� ......
(1)查询C01课程成绩不为Null的学生的姓名和成绩。
分析:因为涉及到课程成绩和学生姓名,需要对student表和sc表进行连接。
代码:
select sname,grade from student,sc where student.sno=sc.sno and c ......