天使羊波波闪耀光芒 软件及互联网爱好者

296月/150

oracle数据库对象-包

程序包是ORACLE PL/SQL的一个特性,它就像是一个容器或者说是一个命名空间,可以将各种逻辑相关的类型、常量、变量、异常和子程序结合在一起。为开发人员编写大型复杂应用程序时,提供了一个良好的组织单元。

当定义好了程序包之后,应用程序就可以通过包来访问各种不同的功能单元,而不用担心过多零散的子程序导致程序代码的松散。

一个PL/SQL程序包包含如下两个部分组成:
·包规范:主要是包的一些定义信息,不包含具体的代码实现部分。
·包体:包体是对包规范中声明的子程序的实现部分,包体的内容对于外部应用程序来说是不可见的,包体就像是一个黑匣子一样,是对包规范的实现。

1、包规范基本语法

CREATE [OR REPLACE] PACKAGE PACKAGE_NAME
{IS | AS}
  PACKAGE_SPECIFICATION
END PACKAGE_NAME;


例子:

--/
CREATE OR REPLACE PACKAGE pack_fun IS
--定义一个函数返回两个数的和
FUNCTION fun_add(num1 IN NUMBER, num2 IN OUT NUMBER) RETURN NUMBER;
--定义一个函数返回两个数的差
FUNCTION fun_sub(num1 IN NUMBER, num2 IN OUT NUMBER) RETURN NUMBER;
--定义一个存储过程显示九九乘法表
PROCEDURE proc_1;
END;
/

286月/150

oracle数据库对象-函数

函数的作用是计算一个功能,往往是用来计算并返回一个计算结果。

1、函数和存储过程的区别:
1)函数和过程比较类似,不同的是函数必须返回一个值,而过程仅是为了执行一系列的操作。

2)在调用的时候,函数可以作为表达式的一部分进行调用,并且可以使用在SELECT中。而过程只能作为一个PL/SQL语句进行调用,且不能在SELECT语句中使用。

3)函数的语法结构和过程比较类似,除了函数使用FUNCTION进行定义之外。外一个重要的特点就是,函数具有RETURN子句,指定函数的返回类型。

4)函数和存储过程都可以使用out参数来返回内容。

2、基本语法:

CREATE [OR REPLACE] FUNCTION function_name
[(parameter_name [IN | OUT | IN OUT]  TYPE[,....])]
RETURN TYPE
{IS | AS}
BEGIN
  FUNCTION BODY
END function_name;

286月/150

oracle数据库对象-存储过程

存储过程:一段程序,用于改变数据库对象的状态,可以包含一个或多个行为,往往是将一个表的记录经过处理后放到另一个表。

1、基本语法:

CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] TYPE[,....])]
{IS | AS }
  [LOCAL declarations]
BEGIN
  executable statements;
[EXCEPTION 
  exception_statements;
END procedure_name;


例子:

--/
CREATE OR REPLACE PROCEDURE proc_1 (num number, name varchar2)
IS
BEGIN
  insert into emp(empno, ename) values (num, name);
END;
/

246月/150

oracle trunc函数

trunc函数作用是截取日期,能准确到整点。截取后得到的仍为date数据类型。

一、基本用法
1、默认截取到日,例如:

select trunc(sysdate) from dual;

结果:2015-06-24 00:00:00

2、截取年:

select trunc(sysdate,'YYYY') from dual;

结果:2015-01-01 00:00:00

3、截取月:

select trunc(sysdate,'MM') from dual;

结果:2015-06-01 00:00:00

4、截取日:

select trunc(sysdate,'DD') from dual;

结果:2015-06-24 00:00:00

5、截取小时:

select trunc(sysdate,'HH24') from dual;

结果:2015-06-24 10:00:00

246月/150

oracle数据库对象-jobs

jobs是oracle数据库对象之一,定时任务。通过调用存储过程dbms_job.submit将任务加入到任务队列中。

查看dbms_job包,它有两个存储过程:

PROCEDURE isubmit ( job IN BINARY_INTEGER,
                    what IN VARCHAR2,
                    next_date IN DATE,
                    interval IN VARCHAR2 DEFAULT 'null',
                    no_parse IN BOOLEAN DEFAULT FALSE);
-- Submit a new job with a given job number.

PROCEDURE submit ( job OUT BINARY_INTEGER,
                   what IN VARCHAR2,
                   next_date IN DATE DEFAULT sysdate,
                   interval IN VARCHAR2 DEFAULT 'null',
                   no_parse IN BOOLEAN DEFAULT FALSE,

-- Bug 1346620: replace pkg vars with constants.
-- Default for instance = dbms_job.any_instance.
                  instance IN  BINARY_INTEGER DEFAULT 0,
                  force IN  BOOLEAN DEFAULT FALSE );
-- Submit a new job.  Chooses JOB from the sequence sys.jobseq.
-- instance and force are added for jobq queue affinity
-- If FORCE is TRUE, then any positive  integer is acceptable as the job
-- instance. If FORCE is FALSE, then the specified instance must be running;
-- otherwise the routine raises an exception.
-- For example,
--   variable x number;
--   execute dbms_job.submit(:x,'pack.proc(''arg1'');',sysdate,'sysdate+1');


注意我们用的是PROCEDURE submit这个存储过程。

1、基本语法

submit ( job OUT BINARY_INTEGER,
         what IN VARCHAR2,
         next_date IN DATE DEFAULT sysdate,
         interval IN VARCHAR2 DEFAULT 'null',
          no_parse IN BOOLEAN DEFAULT FALSE,
);


说明:
job:输出变量,是此任务在任务队列中的编号
what:执行的存储过程或sql语句
next_date:任务第一次执行的时间
interval:注意不是每次执行的间隔时间,而是下一次的执行时间,在本次执行之前对这个表达式求值算出下一次执行时间,所以一般都是sysdate加多少算出来的。

一般我们只要改前4个参数就可以了,任务下一次执行时间是在,本次任务开始时计算出来的。

246月/150

oracle数据库对象-datebase link

database link是oracle的数据库对象之一,用于跨数据库访问。它定义了一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。database link是A到B单向的连接。

1、准备工作
1)在tnsnames.ora中做好名字解析的配置。

vim $ORACLE_HOME/network/admin/tnsnames.ora

例如:

TESTDB52 =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.12.52)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = testdb)
     )
)


2)检查tnsping能否成功

tnsping testdb52

2、基本语法

CREATE [PUBLIC] DATABASE LINK link_name
CONNECT TO username IDENTIFIED BY password
USING 'connect_string';

说明:
link_name:database link的名称
username:对端数据库的用户名
password:对端数据库的密码
connect_string:连接字符串

226月/150

学而不思则罔 思而不学则殆

《鸿观》节目推荐的几本好书:

1、《全球通史》 历史学
2、《自私的基因》 生物学
3、《枪炮、病菌和钢铁》 人类学
4、《失控》 互联网方面
5、《时间简史》 宇宙方面
6、《从黎明到衰落》 西方文化史
7、《艺术的故事》 艺术方面

烧脑神书:
《尤利西斯》
《周易》
《梦的解析》
《看不见的城市》
《微积分》

226月/150

工作体会2

分析系统的方法:
1、功能点
2、信息流、数据流
3、系统边界

做事有把握!

285月/150

oracle数据库对象-同义词

同义词(synonym)是数据库对象,相当于给表起一个别名。

通过创建同义词可以简化对象的访问,使用同义词可以:
1)更方便的引用其他用户拥有的表
2)缩短冗长的对象名

例子:

SQL> select object_name, object_type, owner from dba_objects where object_name='DUAL';

OBJECT_NAME   OBJECT_TYPE   OWNER
------------- ------------- -------------
DUAL          TABLE         SYS
DUAL          SYNONYM       PUBLIC


从例子中看到SYS用户有DUAL表,为了让其它用户能引用DUAL表,建立了一个公共的同义词。

1、创建同义词

CREATE [PUBLIC] SYNONYM synonym_name FOR object_name;

2、删除同义词

DROP SYNONYM synonym_name;

3、查看所有同义词

select * from dba_synonyms;

4、权限
CREATE SYNONYM权限:创建自己私有同义词
CREATE ANY SYNONYM权限:创建其它用户的私有同义词
CREATE PUBLIC SYNONYM权限:创建自己公有同义词

285月/150

oracle数据库对象-序列

序列(sequence)是oracle数据库对象中的一个,每次使用时它会自动增加(或减少)。

1、创建序列
语法:

CREATE SEQUENCE sequence_name
  [INCREMENT BY n]
  [START WITH n]
  [{MAXVALUE n | NOMAXVALUE}] 10^27
  [{MINVALUE n | NOMINVALUE}] -10^27
  [{CYCLE | NOCYCLE }]
  [{CACHE n | NOCACHE}];


说明:
INCREMENT BY:每次加几个
START WITH:从几开始
MAXVALUE:最大值是多少,或NOMAXVALUE不设置最大值
MINVALUE:最小值是多少,或NOMINVALUE不设置最小值
CYCLE:累加到最大值之后循环,或NOCYCLE一直累加不循环
CACHE:设置内存里缓存多少个序列,如果系统down掉了内存中的序列会丢失,导致序列跳号,也可以设置为NOCACHE不缓存

创建语句:

create sequence seq1
increment by 1
start with 1
maxvalue 999999
minvalue 1
cycle
nocache;

这个序列的值从1到999999递增循环。