使用Oracle SQL Developer
新建连接:配置Mysql
连接名随便写,
用户名:scott
密码:tiger
如果是超级用户,角色选择sysdba
主机名,如果是本机(推荐)就是localhost,如果是其他电脑,就写其他电脑的IP。(虚拟机最好选择桥接网卡)
端口1521
以后工作的时候数据库服务器都是单独的电脑,
配置好以后测试连接,
如何知道Oracle的端口呢,可以使用Fport,只能在XP上使用。
连接上以后就可以操作了,类似于SQLYog。
工具à首选项à代码编辑器à行装订线à显示行数 可以现实行号。
PLSQL
类似于JDBC中操作结果集。
--如果没有变量说明 ,declare可以省去
--PL/SQL ,Hello World
declare
--变量说明
begin
--程序
dbms_output.put_line(‘HelloWorld’);
end;
/
--上面并没有输出,我们需要手动打开输出的开关:
set serveroutput on
/
--会打印HelloWorld
/*
文档的位置:
在 Oracle 文档的 Book 中,
看这两本书,上面的类似API文档,
下面的是语法手册。
一共有198个程序包。
*/
--通过desc也可以查看帮助文档结构:
desc dbms_output
PL/SQL语法
PL/SQL全称是ProcedureLanguage/SQL,是过程语言的SQL。是Oracle对SQL语言的过程化扩展。就是指在SQL命令中增加了过程处理语句(如分支,循环),使SQL语句具有过程处理能力。
JDBC与PL/SQL功能一样,为什么还要学习PL/SQL呢?
因为PL/SQL是SQL的一个扩展。
而操作数据库最快的程序语言应该是PL/SQL语言。
在我们的Java程序中,通过调用PL/SQL操作数据库,而不在通过程序直接对数据库进行增删改查。
PL/SQL是Oracle对SQL的扩展,SQLserver对SQL的扩展是Transact-sql,也叫做T-SQL。
完整语法格式
declare
说明部分(变量说明,光标说明,例外说明)
begin
语句序列 (DML语句)…
exception
例外处理语句
end;
/
变量定义:
变量名在前面,类型在后面,类型与数据库列的类名一致,
在PL/SQL中赋值是通过 :=
My_name:引用型变量,emp.ename%type;意思为:使用emp表的ename列的类型作为my_name的类型。
引用型变量的好处就是:如果表中列的类型变了,程序可以不用改动。
--引用型变量示例:
set serveroutput on
declare
pename emp.ename%type;
psal emp.sal%type;
begin
--使用into将检索出来的数据赋值到变量中
selectename,sal into pename,psal from emp whereempno=7839;
--打印
dbms_output.put_line(pename||’的薪水是’||psal);
end;
/
记录型变量:
emp_rec emp%rowtype;意思是取emp表中一行的类型作为emp_rec的类型。一行有多个列,可以把记录型变量理解为一个数组,这个数组中的每个元素就是这一行上的每一列。要引用其中的一列,使用:emp_rec.ename:=’ADAMS’;
--记录型变量示例:
--查询并打印员工号为7839的姓名和薪水。
set serveroutput on
declare
--定义记录型变量,代表一行
emp_recemp%rowtype;
begin
--查询出empno为7839的一行记录,将这一行记录赋值给emp_rec,
--通过emp_rec.sal来使用emp_rec数组中列名为sal的数据。
select * into emp_rec from emp whereempno=7839;
dbms_output.put_line(emp_rec.ename||’的薪水是’||emp_rec.sal);
end;
/
IF语句
语法与Java完全一样。唯一区别是最后要加上END IF。还有ELSEIF的写法:
--示例:判断用户从键盘上输入的数字:
set serveroutput on
--获取键盘输入。prompt是提示信息,num是一个地址值,含义是在改地址上保存了键盘输入的值。
accept num prompt ‘请输入一个数字’;
declare
--定义变量,问题是这个变量的值需要从键盘上获取,如何获取呢?
--要写在declare的外面
--在获取num的值得时候,因为num是一个地址值,所以取值的时候要加上取地址符。
pnumnumber := #
begin
--if判断
ifpnum = 0 then dbms_output.put_line(‘您输入的是0’);
elseifpnum = 1 then dbms_output.put_line(‘您输入的是1’);
elseifpnum = 2 then dbms_output.put_line(‘您输入的是2’);
elsedbms_output.put_line(‘其他数字’);
endif;
end;
/
循环语法:与Java完全一样
习惯用第二种,因为空值光标最容易。
--循环示例:打印1-10
set serveroutput on
declare
pnumnumber := 1;
begin
loop
--设定退出条件,当pnum>10的时候推出。
exitwhen pnum> 10;
dbms_output.put_line(pnum);
--定义自增,不能使用++,使用:=
pnum:= pnum+1;
endloop;
end;
/
将数据插入到变量的时候,如果数据超过一条,就会报一个too many rows异常。