首页 > 代码库 > oracle的一些问题

oracle的一些问题

好久时间没有用oracle,这次因为有个项目的需要,又重新温习了一下oracle。

我使用的oracle的版本是windows oracle 11g_R2.

首先先说一下安装。这个没有太大的问题,主要是安装的时候。有一个填写的地方。

在这里的时候会建立一个数据库。名称叫orcl。

创建服务端的监听程序。

使用

这个地方主要是服务端需要,就是服务端会在哪个端口来进行监听。这个最好是配制成ip地址+端口号。

这时候使用服务端sqlplus可以连接到数据库,如果外网连接不上,那可能是防火墙的问题,需要在防火墙中将oacle的tnslisterner.exe加入到防火墙的外网策略之中。

下面进行客户端的工作,客户端需要配置的是本地命名配置。

image

服务名填写oracle数据库名就行

2

下面使用navicat客户端进行链接。

需要配置oracle的dll

 

3

4

完成后没有问题。

建立函数,存储过程和定时器。

function:

CREATE OR REPLACE
FUNCTION wxSumFun (type_id IN NUMBER)
RETURN NUMBER
AS
sumwxnum NUMBER;
BEGIN
    -- routine body goes here, e.g.
    -- DBMS_OUTPUT.PUT_LINE(‘Navicat for Oracle‘);
select count(id) into sumwxnum from t_userbehavior t where t.USERTYPE =type_id and  t.inserttime between to_date((select trunc(sysdate-1) from dual),‘yyyy-mm-dd hh24:mi:ss‘) and to_date((select trunc(sysdate) from dual),‘yyyy-mm-dd hh24:mi:ss‘);
    RETURN sumwxnum;
END;

 

存储过程:

CREATE OR REPLACE
PROCEDURE "WXUSERPRO" AS

bandnum int;
focusnum int;
unbandnum int;
unfocusnum int;
addnum int;
increasenum int;
BEGIN
    -- routine body goes here, e.g.
    -- DBMS_OUTPUT.PUT_LINE(‘Navicat for Oracle‘);
SELECT WXSUMFUN(1) INTO bandnum FROM dual;
SELECT WXSUMFUN(2) INTO focusnum FROM dual;
SELECT WXSUMFUN(3) INTO unbandnum FROM dual;
SELECT WXSUMFUN(4) INTO unfocusnum FROM dual;
SELECT WXSUMFUN(5) INTO addnum FROM dual;
SELECT WXSUMFUN(6) INTO increasenum FROM dual;

INSERT into "t_userfocus"("id","counttime","userBandNum","userFocusNum","unuserBandNum","unuserFocusNum","userAddNum","userIncreaseNum") VALUES(SEQ_PRO_SUMWX.Nextval,(select to_char(sysdate-1,‘yyyyMMdd‘) from dual),bandnum,focusnum,unbandnum,unfocusnum,addnum,increasenum);
END;

 

定时器:

在建立定时器的时候引用了存储过程,一直报这个错误:PLS-00201: 必须说明标识符 ‘......‘

后来将存储过程改成大写,重新编译了一下,问题解决。

declare job7 NUMBER;
begin
  sys.dbms_job.submit(job => job7,
                      what => ‘WXUSERPRO;‘,
                      next_date => to_date(‘17-05-2014 01:00:00‘, ‘dd-mm-yyyy hh24:mi:ss‘),
                      interval => ‘TRUNC(SYSDATE+1)‘);
  commit;
end;

删除job:

BEGIN
dbms_job.remove(4);
end;

其中remove的job就是下面的数字:

1