`
tzq668766
  • 浏览: 81608 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Oracle学习笔记4

阅读更多
1.表:
select * from cat; //显示所有用户对象。
select * from tab; //显示所有用户表。
select table_name from user_tables; //显示所有用户表


2.视图:
select text from user_views where view_name=upper('&view_name');

//显示某个视图
3.索引:
select index_name,table_owner,table_name,tablespace_name,status from user_indexes order by table_name;

//显示用户索引
4.触发器:
select trigger_name,trigger_type,table_owner,table_name,status from user_triggers;

//显示用户触发器
5.快照:
select owner,name,master,table_name,last_refresh,next from user_snapshots order by owner,next;

6.同义词:
select * from syn;

7.序列:
select * from seq;

8.数据库链路:
select * from user_db_links;


9.约束限制:
select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS
from user_constraints WHERE TABLE_name=upper('&TABLE_Name');

10.本用户读取其他用户对象的权限:
select * from user_tab_privs;

11.本用户所拥有的系统权限:
select * from user_sys_privs;

12.用户:
select * from all_users order by user_id;

13.表空间剩余自由空间情况:
select tablespace_name,sum(bytes) 总字节数,max(bytes),count(*) from dba_free_space group by tablespace_name;

14.数据字典:
select table_name from dict order by table_name;

可以通过数据字典表查询其他系统表
select table_name from dict where table_name = ‘ ***%’order by table_name;

15.锁及资源信息:
select * from v$lock;不包括DDL锁
16.数据库字符集:
select name,value$ from props$ where name='NLS_CHARACTERSET';

simplified chiniese_china.zhs16GBK 简体中午编码
17.inin.ora参数:
select name,value from v$parameter order by name;

18.SQL共享池:
select sql_text from v$sqlarea;

19.数据库:
select * from v$database;

20.控制文件:
select * from V$controlfile;

21.重做日志文件信息:
select * from V$logfile;

22.来自控制文件中的日志文件信息:
select * from V$log;
23.来自控制文件中的数据文件信息:
select * from V$datafile;


24.NLS参数当前值:
select * from V$nls_parameters;

25.ORACLE版本信息:
select * from v$version;

26.描述后台进程:
select * from v$bgprocess;

27.查看版本信息:
select * from product_component_version;

28.查询oracle中所有用户信息
select * from dba_users;

29.只查询用户和密码
select username,password from dba_users;

30.查询当前用户信息
select * from dba_ustats;
3. PL/SQL语言
Procedure Language Structure Qurrey Language――PL/SQL

3.1. Oracle的变量类型
数据类型
数字,字符,布尔,日期
组合类型
Record(不同数据集合),table(一张表),varray(数组)
参考型
Ref cursor, ref object_type
数字类型
Binary_integer,Dec,Float
Number
Number(3)
Number(4,3) 前面的总长,后面是小数的长度
字符类型
Char(不可变长), varchar(过时) , varchar2(现在使用) , string
Boolean,date
Declare
V_firstName varchar(20);
Declare
V_firstName students.first_name%type; ――和students.first_name的大小一致
*显示输出―――set serveroutput on
3.2. 代码注释
多行 /* */
单行 --
3.3. Type关键字:
Example 1:
Declare
V_id students.id%type:=1;
V_name students.name%type:=’mudi’;
V_age students.age%type:=24;
Begin
Dbms_ouput.put_line(v_id);
Dbms_output.put_line(v_name);
Dbms_output.put_line(v_age);
End;

DECLARE
v_LastName S_EMP.LAST_NAME%TYPE;
v_FirstName S_EMP.FIRST_NAME%TYPE;
v_ID S_EMP.ID%TYPE;

Example 2:
BEGIN
select ID,LAST_NAME,FIRST_NAME INTO v_ID,v_LastName,v_FirstName FROM S_EMP WHERE rownum = 1;
DBMS_OUTPUT.PUT_LINE(v_ID);
DBMS_OUTPUT.PUT_LINE(v_LastName);
DBMS_OUTPUT.PUT_LINE(v_FirstName);
END;
多个TYPE类型组合使用
DECLARE
v_LastName S_EMP.LAST_NAME%TYPE;
v_FirstName S_EMP.FIRST_NAME%TYPE;
v_ID S_EMP.ID%TYPE;
BEGIN
select ID,LAST_NAME,FIRST_NAME INTO v_ID,v_LastName,v_FirstName FROM S_EMP WHERE rownum = 1;
DBMS_OUTPUT.PUT_LINE(v_ID);
DBMS_OUTPUT.PUT_LINE(v_LastName);
DBMS_OUTPUT.PUT_LINE(v_FirstName);
END;

3.4. record组合类型(相当于C中的结构体)
Example 1:
Type class is record(
Id students.id%type;
Name students.name%type;
Age studnets.age%type;
);
Sd0510 class;
Begin
Select * into sd0510 from classes where class_name=’sd0510’;
Dbms_output.put_line(sd0510.id);
End;

Example 2:
Declare
Type emp_type is record(
Emp_id s_emp.id%type,
Emp_first_name s_emp.first_name%type,
Emp_last_name s_emp.last_name%type
)
Emp emp_type;
Begin
Select * into emp from s_emp where id=1;
Dbms_output.put_line(emp.emp_id);
End;

3.5. Rowtype类型
Example 1:
declare
Emp s_emp%rowtype;
Begin
Select * into emp from s_emp where id=1;
End;

Table类型
Example 1:
Declare
Type t_emp is table of s_emp%rowtype index by binary_integer;
Emp t_emp;
Begin
Select * into emp(100) from s_emp where id = 100;
dbms_output.put_line('id===>'||emp(100).id);
dbms_output.put_line('first_name===>'||emp(100).first_name);
dbms_output.put_line('last_name===>'||emp(100).last_name);
end;

3.6. TABLE类型
TYPE Info IS TABLE OF S_EMP%ROWTYPE INDEX BY BINARY_INTEGER;
v_info Info;
3.7. 变量的作用域与可见性
如同JAVA

3.8. 控制语句
IF 判断语句
JAVA
If(logic expression){}
Else if(logic expression){}
Else{}
PL/SQL
If logic expression then ….
Elsif logic expression then
Endif
Example 1:
declare
i number;
begin
select count(*) into i from s_emp;
if i=0 then
dbms_output.put_line('no elements in s_emp');
elsif i<10 then
dbms_output.put_line('number < 10');
else
dbms_output.put_line(i);
end if;
end;
Loop 表达式
Loop
If logic_expression then exit;
End loop;
While表达式
While logic

End loop;
For 表达式(与JAVA的特点是)
For j in low..high loop
….
End loop;
GOTO语句
特点:只能从内部跳到外部
NULL语句
解决一些空语句的问题
Example 1:
If … then


Else
Null;
End if;
Example 2:
If … then

Goto goto_end;
End;
<<goto_end>>
End;
3.9. SQL in PL/SQL
Data Manipulation language
Data Definition language
Transation Control
System comment
ESQL
在PL/SQL只能使用DML,Transation Control
3.10. Cursor 的使用
声明 Cursor s is select * from s_emp;
打开 Open s;
提取数据 FETCH S INTO emp;
EXIT WHEN S%NOTFOUND;
Cursor的关键字
Found
Notfound
Isopen
Rowcount
在loop中使用cursor
declare
cursor emp_cur is select * from s_emp;
emp s_emp%rowtype;
begin
loop
fetch emp_cur into emp;
if emp_cur%notfound then
exit;
end if;
end loop;
close emp_cur;
end;

/
在while中使用cursor
Open emp_cur;
While emp_cur%found loop
Fetch emp_cur into emp;
Dbms_output.put_line(emp.id);
End loop;
Close emp_cur;

在for中使用cursor
open emp_cur;
for emp in emp_cur loop
dbms_output.put_line(emp.id);
end loop;
close emp_cur;

3.11. 异常的使用
异常分为:
系统异常
Dup_val_on_index
Timeout_on_resource
……
自定义异常
Example 1:
DECLARE
myException EXCEPTION;
F_NAME S_EMP.FIRST_NAME%TYPE;
F1_NAME S_EMP.FIRST_NAME%TYPE;
CURSOR S IS SELECT FIRST_NAME FROM S_EMP;
BEGIN
OPEN S;
LOOP
FETCH S INTO F_NAME;
EXIT WHEN S%NOTFOUND;
IF F_NAME IS NULL THEN
RAISE myException;
ELSE
DBMS_OUTPUT.PUT_LINE(' F_Name : ' || F_NAME);
END IF;

END LOOP;
CLOSE S;
select first_name into f1_name from s_emp;
DBMS_OUTPUT.PUT_LINE(' F1_Name : ' || F1_NAME);
EXCEPTION
WHEN myException THEN
DBMS_OUTPUT.PUT_LINE(' Captured !');
CLOSE S;
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(' Captured NO DATA FOUND!');
END;

注意:for emp in emp_cur loop …..end loop;自动关闭cursor
3.12. 使用PROCEDURE
行参模式分为 in , out , int out 默认为 in
CREATE OR REPLACE PROCEDURE ModeTest(
p_In IN NUMBER,
p_Out OUT NUMBER,
p_inout IN OUT NUMBER)
IS
v_Local Number;
BEGIN
v_Local := p_In;
p_Out := 7;
p_InOut := 7;
END ModeTest;

/
注意: 如果在SQLPLUS里看详细的信息,show errors
In模式形参可以有默认值 DEFAULT 或者 :=
两种命名方法
名字标识法:
Test_procedure(outPara=>a,intPara=>b,inoutPara=>c);

outPara , intPara , inoutPara 为行参名字
位置标识法:
Test_procedure(a,b,c);
注意:要想直接在sqlplus运行procedure
Variable a number;
Variable b number;
Exec test_procedure(inpara=>100,outpara=>2);
输出结果
Print

以上命令只能用在SQLPLUS的CONSOLE
匿名块每次都编译,有名块第一次编译,以后不用。
删除PROCEDURE : drop procedure_name
3.13. 使用FUNCTION
3.13.1. 程序分两种:
1.通过create or replace 编译的存在数据库里
2.没有 create or replace 不存在数据库里
且只能被调用的父过程调用。
CREATE OR REPLACE FUNCTION lessthen_test(
src IN NUMBER,
ref IN NUMBER := 400)
RETURN BOOLEAN AS
BEGIN
IF src > ref THEN RETURN FALSE;
ELSE RETURN TRUE;
END IF;
END;

3.14. PACKAGE
3.14.1. 包的声明
CREATE OR REPLACE PACKAGE MyPackages IS
PROCEDURE AddStudent(
p_ID IN S_EMP.ID%TYPE,
p_FNAME IN S_EMP.FIRST_NAME%TYPE := '',
p_LNAME IN S_EMP.LAST_NAME%TYPE DEFAULT ''
);
FUNCTION DeleteStudent(
p_ID IN S_EMP.ID%TYPE
) RETURN BOOLEAN;

END MyPackages;
3.14.2. 包的定义
CREATE OR REPLACE PACKAGE BODY MyPackages AS
PROCEDURE AddStudent(
p_ID IN S_EMP.ID%TYPE,
p_FNAME IN S_EMP.FIRST_NAME%TYPE := '',
p_LNAME IN S_EMP.LAST_NAME%TYPE DEFAULT ''
) IS
Duplicate EXCEPTION;
i NUMBER := 0;
BEGIN
SELECT COUNT(*) INTO i FROM S_EMP WHERE ID = p_ID AND FIRST_NAME = p_FNAME AND LAST_NAME = p_LNAME;
IF i = 0 THEN
INSERT INTO S_EMP (ID,FIRST_NAME,LAST_NAME) VALUES(p_ID,p_FNAME,p_LNAME);
COMMIT;
ELSE
RAISE Duplicate;
END IF;
EXCEPTION
WHEN Duplicate THEN
DBMS_OUTPUT.PUT_LINE('Duplicate Record');
END AddStudent;
FUNCTION DeleteStudent(
p_ID IN S_EMP.ID%TYPE
) RETURN BOOLEAN IS
i NUMBER := 0;
BEGIN
SELECT COUNT(*) INTO i FROM S_EMP WHERE ID = p_ID;
IF i > 0 THEN
DELETE FROM S_EMP WHERE ID = p_ID;
COMMIT;
ELSE
NULL;
END IF;
RETURN TRUE;
END DeleteStudent;
END;

3.14.3. 包的初始化代码
3.15. 触发器
CREATE OR REPLACE TRIGGER qiuTrigger after DELETE OR INSERT OR UPDATE ON S_EMP
FOR EACH ROW(行触发器,不写为语句触发器)
DECLARE
i NUMBER := 0;
BEGIN
SELECT COUNT(*) INTO i FROM S_EMP
DBMS_OUTPUT.PUT_LINE(' Only ' || i || ' Student(s) left.');
END;

三种触发条件
两种触发时间
两种触发规则 (每行或每语句)
不能有事务语句
不能在正在修改的表
不可以修改任何变化表(定义触发器的表);
3.16. Pl/sql中执行动态SQL DDL语句
Execute immediate test_sql ;
分享到:
评论

相关推荐

    Oracle学习笔记 PDF

    ### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...

    Oracle学习笔记

    Oracle学习笔记 Oracle学习笔记是李兴华老师编写的Oracle从入门到精通的学习笔记,涵盖了 Oracle 的多表查询、连接、组函数和分组统计等知识点。在本篇笔记中,李兴华老师详细介绍了多表查询的基本语法、左右连接...

    Oracle学习笔记精华版

    Oracle学习笔记精华版是针对数据库管理系统Oracle的一份重要学习资源,涵盖了从基础概念到高级特性的全面知识。Oracle,作为全球广泛使用的大型企业级数据库系统,对于IT专业人员尤其是数据库管理员(DBA)来说,是...

    Oracle学习笔记.doc

    Oracle学习笔记 以下是我这一周学习oracle整理的笔记,包括课堂的内容和自己看额外看的视频补充的一些内容,基本上囊括了所有oracle的基本知识。主要的形式是例子代码加代码解释加运行结果,我个人认为对于没有学习...

    Oracle学习笔记.pdf

    在Oracle学习笔记中,对安装卸载和配置的详尽讲解,不仅为学习者提供了操作指导,而且还涉及到了数据库管理的一些基础知识点。这些内容对于数据库管理员和开发人员来说都是十分重要的,因为它们是操作Oracle数据库的...

    Oracle学习笔记-日常应用、深入管理、性能优化

    资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...

    oracle学习笔记整理

    以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...

    oracle dba学习笔记

    Oracle DBA 学习笔记 标题:Oracle DBA 学习笔记 描述:学习使用维护 Oracle 数据库数年,对认为值得记录的 Oracle 维护脚本进行记录总结,存起来,虽然今后开源是方向,但不可否认 Oracle 仍然非常有水平的,在...

    Oracle学习笔记 Oracle学习笔记

    根据提供的信息,我们可以总结出以下Oracle数据库学习的关键知识点: ...以上是基于提供的内容整理出的Oracle学习笔记中的关键知识点。通过理解这些基础知识,可以更好地管理和操作Oracle数据库。

    oracle学习笔记.txt

    超详细Oracle学习笔记,详细记录了oracle的学习过程中遇到的各种问题及基础知识,适合初中级oracle使用人员学习参考。

    oracle学习笔记-入门基础

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的特性和功能来优化数据管理和查询性能。本文主要探讨Oracle数据库的入门基础知识,特别是与索引相关的概念。 首先,我们要理解ROWID的概念。ROWID是...

    Oracle学习笔记——日常应用、深入管理、性能优化 示例代码

    Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛应用。本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和...

    oracle学习笔记下载

    ### Oracle 学习笔记知识点概览 #### 一、Oracle 数据库系统参数查询与管理 在 Oracle 数据库的学习过程中,了解如何查看和管理数据库的系统参数是非常重要的。这些参数直接影响着数据库的性能和稳定性。 ##### ...

    全网最全的oracle学习笔记

    全网最全的oracle学习笔记,oracle学习笔记,oracle,### 4、oracle的七个服务 ```sql 1、Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如...

    Oracle10g学习笔记

    Oracle10g学习笔记,Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记

    MSDN oracle学习笔记

    在“MSDN Oracle学习笔记”中,我们可以期待找到关于Oracle数据库的详细讲解和实践指导。 首先,Oracle数据库的基础知识是必不可少的。这通常涵盖数据库系统的基本概念,如SQL(结构化查询语言)的使用,数据类型,...

Global site tag (gtag.js) - Google Analytics