分类目录归档:ORACLE

oracle interval函数

一、interval函数
interval函数用于将一个整形值转换成时间值date类型的年月或时分秒。

oracle语法:

interval 'integer [- integer]' {YEAR | MONTH | DAY | HOUR | MINUTE | SECOND} [(precision)][TO {YEAR | MONTH | DAY | HOUR | MINUTE | SECOND}]

注:
1、年、月、日、时、分、秒可以单独使用。
2、{YEAR | MONTH} to {YEAR | MONTH}和
{DAY | HOUR | MINUTE | SECOND} to {DAY | HOUR | MINUTE | SECOND}是分别使用。
3、该函数常用来计算一段时间差。
4、precision为精度域,有效范围是0到9,默认值为2。这里精度是指显示结果的精度,如果结果超过两位长度要指定精度。

例子:
1、表示2个年

select interval '2' year from dual;

INTERVAL'2'YEAR
---------------------------------------------------------------------------
+02-00


2、表示1234个年

select interval '1234' year(4) from dual;

INTERVAL'1234'YEAR(4)
---------------------------------------------------------------------------
+1234-00


继续阅读oracle interval函数

oracle清理数据问题

一、删除一个用户下所有数据库对象
一种方法是删除这个用户然后重建,需要管理员操作:

drop user wangyi cascade; --删除用户
select * from dba_users where username = 'wangyi'; --查询默认表空间
drop tablespace WANGYI_DTBS including contents and datafiles; --删除表空间

重建用户:

create user wangyi identified by wangyi;
grant create session, create view, create any index, imp_full_database to wangyi;
alter user wangyi default tablespace wangyi temporary tablespace temp;
alter user wangyi quota unlimited on wangyi;

二、清除整个表的内容

delete from 表名;
truncate table 表名;

delete和truncate的区别:
delete删除的数据可以恢复,truncate不能恢复
delete高水位线不会下降,truncate高水位线会下降(释放表空间)
继续阅读oracle清理数据问题

PL/SQL基础学习(4)

–1、select * into 必须只满足一条记录 没有记录或有多条记录会报异常
–只能取出一条 要取多条要用游标
–2、update和delete语句没有记录或多条记录满足都不会出现异常

3、
–select * into 如果没找到记录会出现异常

--/
DECLARE
v_emp emp%rowtype;
BEGIN
select * into v_emp from emp where empno = 9999;
dbms_output.put_line(v_emp.ename);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('未找到记录');
END;
/

4、
–select * into 如果有多行记录满足也会出现异常

--/
DECLARE
v_emp emp%rowtype;
BEGIN
select * into v_emp from emp where job = 'MANAGER';
dbms_output.put_line(v_emp.ename);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
dbms_output.put_line('超过一行返回');
END;
/

继续阅读PL/SQL基础学习(4)

oracle数据库对象-游标

游标分为隐式游标和显示游标。

一、隐式游标
对于select * into和DML操作(update、delete、insert)都附带有一个隐式游标。

隐式游标的属性

SQL%ROWCOUNT   整型  代表DML语句成功执行的数据行数
SQL%FOUND    布尔型  值为TRUE代表插入、删除、更新或单行查询操作成功
SQL%NOTFOUND 布尔型  与SQL%FOUND属性返回值相反
SQL%ISOPEN   布尔型  DML执行过程中为真,结束后为假


当系统使用一个隐式游标时,可以通过隐式游标的属性来了解操作的状态和结果,进而控制程序的流程。隐式游标可以使用名字SQL来访问,但要注意,通过SQL游标名总是只能访问前一个DML操作或单行SELECT操作的游标属性。所以通常在刚刚执行完操作之后,立即使用SQL游标名来访问属性。

例子:

--/
DECLARE
v_emp emp%rowtype;
BEGIN
delete from emp where empno = 9999;
IF SQL%notfound THEN
  dbms_output.put_line('隐式游标 属性为notfound');
END IF;
dbms_output.put_line('delete无记录不会出现异常');
END;
/


继续阅读oracle数据库对象-游标

PL/SQL基础学习(3)

1、–helloworld程序

--/
BEGIN
  DBMS_OUTPUT.PUT_LINE('Hello World!!!');
END;
/


2、–定义变量
–变量名 类型

--/
DECLARE
  A NUMBER(5, 2) := -1;
  B NUMBER(5, 2) := 3;
  C NUMBER(5, 2);
BEGIN
  C := A * B / (A + B);
  DBMS_OUTPUT.PUT_LINE('c=' || C);
EXCEPTION
  WHEN ZERO_DIVIDE THEN
    DBMS_OUTPUT.PUT_LINE('除数不能为0!');
END;
/


3、–定义常量

--/
DECLARE
a CONSTANT NUMBER := 100;
BEGIN
DBMS_OUTPUT.PUT_LINE(a);
END;
/


继续阅读PL/SQL基础学习(3)

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

继续阅读oracle数据库对象-包

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;


继续阅读oracle数据库对象-函数

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


继续阅读oracle数据库对象-存储过程

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
继续阅读oracle trunc函数

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个参数就可以了,任务下一次执行时间是在,本次任务开始时计算出来的。
继续阅读oracle数据库对象-jobs