Oracle:更新多行同列不同值

遇到个问题……

这几天遇到个问题,就是在访问后台的时候被强制使用了SSL,所以导致上不了后台.我是如下这样解决的:


// 下面这个函数在:[wp-includes/functions.php]中
/**
* Whether to force SSL used for the Administration Screens.
*
* @since 2.6.0
*
* @staticvar bool $forced
*
* @param string|bool $force Optional. Whether to force SSL in admin screens. Default null.
* @return bool True if forced, false if not forced.
*/
function force_ssl_admin( $force = null ) {
static $forced = false;

if ( !is_null( $force ) ) {
$old_forced = $forced;
$forced = $force;
return $old_forced;
}
return false;
//return $forced; 注释掉这一行,然上面直接添加一句 return false;即可.
}

只能这样临时先访问了…

Oracle LOGO
image-2460

关于题目的问题

其实对于题目,说起来也很简单了,大概是这样一个场景:

比如我们正在构建一个信息系统,每个用户每个月有一次抽奖机会,假设我们需要给每次最新的抽奖记录一个标记为1,那么之前的就要标识为0.

好了,上面这个场景就是这个问题.一句话就是:更新某个用户最新一条记录为1,之前的为0.

解决了.


update users_activity
set lastupdate=(
case
when id=#{id} then 1
when id!=#{id} then 0
else 0
end
) where userid=#{userid}

--
update users_activity
set 要更新的字段=(
case
when id=最新记录ID then 1
when id!=最新记录ID then 0
else 0
end
) where userid=用户ID

如上,问题解决.

SQL*Loader加载数据

加载有分割符的数据

数据文件

示例数据文件(保存为:oracledata.data):


"TE,SE","D,ASA",1520 //","必须在一个字符串中,比如:"D,ASA"是正确的.
TES,"DAT,E",1598
"EW,W",TET,1998
DSEW,"E,WTW",1580

控制文件

示例控制文件(另存为:ldr_case.ctl)

LOAD DATA
INFILE oracledata.data
TRUNCATE INTO TABLE BONUS
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
//OPTIONALLY ENCLOSED BY 参数指明界定符.
(ENAME,JOB,SAL)
BEGINDATA

–>之后就是执行命令:

sqlldr SCOTT/TIGER CONTROL=ldr_case.ctl
//然后
sqlplus SCOTT/TIGER
SELECT * FROM BONUS;

导入没有分割符的数据

示例数据

示例数据(保存为:oracledata1.data):


SMITH CLEAK 3904
ALLEN SALESMAN 2891
WARDA SALESMAN 3128
KINGA PRESIDENT 2523

控制文件

控制文件如下(另存为:ldr_case1.ctl):


LOAD DATA
INFILE oracledata1.data
TRUNCATE INTO TABLE BONUS
(
ENAME position(1:5),//1
JOB position(7:15),
SAL position(17:20)//position可以用于定位数据,还有以下格式:
//position(*+2:15):表示从(1)结束之后增加两个字符.
//position(*)char(9):相对偏移量+类型和长度的优势在于,
//你只需要为第一列指定开始位置,其他列只需要指定列长度就可以了,实际使用比较方便
)
BEGINDATA

接下来的事情,还用我说嘛?

Oracle LOGO
image-1829

假如导入数据的列,比表中的数据少怎么办

示例数据

表结构:

——————————-
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
SAL NUMBER
COMM NUMBER
——————————-

仔细看来,少一列是没有任何问题的.

此处就不演示怎么插入少一列的数据了.

设置默认值:只需要修改控制文件

示例数据(保存为:oracledata2.data):


SMITH CLEAK 3904
ALLEN SALESMAN 2891
WARDA SALESMAN 3128
KINGA PRESIDENT 2523

控制文件

控制文件如下(另存为:ldr_case2.ctl):


LOAD DATA
INFILE oracledata1.data
TRUNCATE INTO TABLE BONUS
(
ENAME position(1:5),//1
JOB position(7:15),
SAL position(17:20),
COMM "0" //设置默认值.
)
BEGINDATA

当然也可以通过SAL列的值来设置COMM列的值,只需要修改控制文件:


LOAD DATA
INFILE oracledata1.data
TRUNCATE INTO TABLE BONUS
(
ENAME position(1:5),//1
JOB position(7:15),
SAL position(17:20),
COMM "substr(:SAL,1,1)"
)
BEGINDATA

其余的就跟上述一样了.

为Oracle创建scott用户及相关数据库

简述

在Oracle 11GR2里面已经没有scott用户了(在以前的数据库中该用户默认是锁定的),为了我们测试方便,可以创建一个scott用户,后面的部分的示例也将关联到此用户.

Oracle LOGO
image-1827

创建用户与数据库的脚本

在登录Oracle数据库之后,运行如下脚本:


//用户名是:SCOTT
//密码是:TIGER

GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT IDENTIFIED BY TIGER;
ALTER USER SCOTT DEFAULT TABLESPACE USERS;
ALTER USER SCOTT TEMPORARY TABLESPACE TEMP;
CONNECT SCOTT/TIGER
DROP TABLE DEPT;
CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;
DROP TABLE EMP;
CREATE TABLE EMP
(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
INSERT INTO DEPT VALUES
(10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES
(30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES
(40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
DROP TABLE BONUS;
CREATE TABLE BONUS
(
ENAME VARCHAR2(10) ,
JOB VARCHAR2(9) ,
SAL NUMBER,
COMM NUMBER
) ;
DROP TABLE SALGRADE;
CREATE TABLE SALGRADE
( GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER );
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
COMMIT;

SET TERMOUT ON
SET ECHO ON

VMware安装Redhat Server6.4,之后安装Oracle 11GR2视频教程

PS:新手录制,有问题请留言告知.

官方的安装教程

官方文档:database/doc/index.htm ,用浏览器打开就可以看了.

  1. 打开页面,右侧找到”Database Installation Guide “单击右侧的HTML
  2. 参照上面的步骤,可以看看[视频教程不是按照官方教程来安装的]
  3. 下面的视频教程,讲到了配置监听

Oracle LOGO
image-1807

只是一点提示

昨天花了半下午终于录制完成了,直接实际操作的,其中需要以下几个软件:

  • VMware 9.0 [英文版][32/64:依你的操作系统而定]
  • Redhat Server 6.4 [英文版][64位]
  • Oracle安装镜像[英文版][64位]
  • Winscp [用于从Windows连接到Linux]

我的配置是:

  • Windows 8 [X64]
  • 8G内存
  • 1T硬盘[分配给Redhat的是50Gm,用于虚拟机的是一个单独的分区]
  • Inter(R) Pentium(R) CPU G630 @ 2.70GHZ

其余部分在视频里面都有介绍,如果有问题,欢迎评论指正.

下载地址

视频下载地址[用屏幕录像专家录制的,总大小:约为200M,国内115网盘]:

录像4[.exe文件,可直接观看]

录像5[.exe文件,可直接观看]

录像6[.exe文件,可直接观看]

录像5[.exe文件,可直接观看]

前面试录了3个,后来被删除了.后面有时间继续录制.

Oracle,启动!

记录第一次启动

不知等了多久,遇到多少错误,多少异常,但总算没有放弃。

这时,我想起了马云的一句话:今天很残酷,明天更残酷,后天很美好,但绝大部分人死在明天晚上,看不到后天的太阳。

说实话,我对电子商务不感冒,但是对于Oracle却是着实的喜欢。

oracle第一次启动
image-1644
oracle第一次启动

沉浸了这么久之后的Oracle,总算可以发挥自己的作用了。

未来之路

这个未来之路说的是,我的学习之路。

不宣誓,认真的学,力求做到问心无愧。

已经在博文目录中创建了Oracle学习笔记,也就是以后所有与Oracle相关的文章,会放在这个目录下面。

在看到启动成功的那一刻,我忽然有种想哭的冲动!

仅仅是因为,这一刻,我已等了太久。