以下的 J2EE 应用程序已经配置, 并且可用下面列出的 URL 来访问。数据库配置文件已经安装到 D:/oracle/product/10.1.0,同时其他选定的安装组件也已经安装到 D:/oracle/product/10.1.0/Db_1。Ultra Search URL:http://zist-4019a65673:5620/ultrasearchUltra Search 管理工具 URL:http://zist-4019a65673:5620/ultrasearch/adminiSQL*Plus URL:http://zist-4019a65673:5560/isqlplus
1.sqlplus 是oracle的客户端
用户名:system
密码:856262
2.从浏览器登陆isqlpluse
端口号为:5560
http://localhost:5560/isqlplus(在局域网登陆的时候需要清楚防火墙和监听器的问题)
3.查询用户下所有的表
select table_name from user_tables;
create table abc(a varchar2(10),b char(10));
4.对于字符型的可以存储为可变的类型
5.oracle中有很多函数,包括,日期函数,转换函数,聚集函数
6.测试用户为scott,默认密码为tiger,系统自动创建的数据库为orcl
7.sql语言的分类:数据定义语言(create,alter,drop ),数据控制语言(crant,revoke),数据操纵语言(select,inesrt,delete,update)
8.desc 表名,用来查询表的名称
9.创建表,创建视图,创建函数,创建过程
10.select pub,sum(price*qty) from books GROUP BY pub HANVING sum(price)>>30;
GROUP BY 中不允许出现sum等聚合函数,需要用having来表示
where后面也不能跟聚集函数
select a1,count(a1) from aa GROP BY a1
11.PL/SQL操纵复杂的sql语句,通过参数和变量的方式来进行查询
PL/SQL块结构如下:
DECLARE()声明变量
....
BEGIN(具体操作内容)
....
EXCEPTION
....
END;
/
表的连接就是两个表的数据在一次查询中显示,比方说:
SELECT eid 编号,ename 姓名,sex 性别,d.name 所在部门 FROM e JOIN d on e.id=d.id(内连接...完全匹配)
外连接:不完全匹配
(右连接)
SELECT eid 编号,ename 姓名,sex 性别,d.name 所在部门 FROM e JOIN d on e.id=d.id(+)
左边的值全部显示出来,右边没有对应的用空值来替代
(左连接)
SELECT eid 编号,ename 姓名,sex 性别,d.name 所在部门 FROM e JOIN d on e.id(+)=d.id
右边的值全部显示出来,左边没有对应的用空值来替代
子查询:
在一个where子句中用子查询来表达一个条件,这个条件不能用简单那的比较表达式来表示
select * from e WHERE id IN (SELECT id FROM d WHERE id=e.id AND id="03")
还有ONTIN,SELECT * 不能用* 返回值多行不能匹配
select * from e WHERE EXISTS (SELECT id FROM d)
SELECT * FROM e WHERE NOT EXISTS (SELECT id from d where id=e.id)
使用UNINT来实现子查询
SELECT eid,ename FROM e UNION SELECT id,name FROM d;
这样就把两张表的信息整合成一个结果集(显示)
ORACLE独有的INTERSECT
SELECT id FROM e INTERSECT SELECT id FROM d
插入多条数据:(批量的插入数据)
INSERT INTO e(eid ,ename ) SELECT id,name FROM d
创建表依赖与已有的表
CREATE TABLE ttt AS (SELECT * FROM e);
PL/SQL 结构化查询语言(块结构的方式)
变量的声明内容,变量的命名规则
DECLARE
x varchar2(10);//定义变量
BEGIN
x:='this is ..';//赋值
DBMS_OUTPUT.PUT_LINE('x的值为:'||)//输出到屏幕,连接符号||
END;
/ //执行完成
--行注释
/*
块注释
*/
显示输出信息
SET SERVEROUTPUT ON SIZE 10000;
IF 分支
IF ... THEN
...
ELSIF ... THEN
...
END IF
CASE 分支
CASE
WHEN ... THEN...
ELSE
END CASE
DECLARE
a number;
b varchar2(10);
BEGIN
a:=2;
IF a=1 THEN
b:='A';
ELSEIF a=2 THEN
b:='B';
ELSE--为其他的全部归到这里
b:='C';
END IF;
DBMS_OUTPUT.PUT_LINE('b的值为'||b)
循环语句:
基本循环LOOP
LOOP
...
END LOOP
WHILE 循环
WHILE expression LOOP
..
END LOOP
FOR 循环
FOR counter IN[REVERSE] start_value...end_value LOOP
...
END LOOP
DECLARE
x number;
BEGIN
x:=0;
LOOP
x:=x+1;
IF x>=3 THEN
EXIT;
END IF;
DBMS_OUTPUT.PUT_LINE('内:x='||x);
END LOOP;
DBMS_OUTPUT.PUT_LINE(''外:x="||x);
END;
/
使用goto进循环
DECLARE
x number;
BEGIN
x:=0;
<<repeat_loop>>
x:=x+1;
DBMS_OUTPUT.PUT_LINE('x'');
IF x<3 THEN
GOTO repeat_loop;
END IF;
END;
/
PL/SQL的异常处理
在PL/SQL 中的一个警告或错误的情形都被成为异常.包括编译时刻异常和运行时刻错误
异常分为系统异常和自定义异常
自定义异常结构:
EXCEPTION
WHEN...THEN
...
系统预定义异常:
DUP_VAL_ON_INDEX向有唯一约束的表中插入重复行
NO_DATA_FOUND在一个SELECT INTO 语句中无返回值
TOO_MANY_ROWS SELECT INTO 语句返回了多行
VALUE_ERROR 一个算法.装好.阶段或大小约束发生错误
ZERO_DIVIDE 发生被零除
自定义异常必须事先声明,并且在适当的时候把异常抛出
复合变量类型:
记录...........
PL/SQL
游标,存储过程,函数,包
游标可以对SQL语句进行逐条处理,帮助我们对数据库的数据进行逐条的进行控制
//游标显示或者隐式
DECLARE
CURSOR cur_para(id varchar2) IS
SELECT books_name FROM books WHERE books_id=id;
t_name books.books_name%TYPE;
BEGIN
OPEN cur_para('0001');
LOOP
FETCH cur_para INTO t_name;
EXIT WHEN cur_para%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(t_name);
END LOOP;
CLOSE cur_para;
END;
/
带名快可以存储在数据库中成为数据库的一个对象
其他程序段可以调用该对象
存储过程是一个PL和sql语句组成的程序段