-- 创建database link
create database link stu_link
connect to student identified by studentusing
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.38.202.43)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = stud)
)
)';
-- 查看已存在的dblink
select * from dba_db_links;
-- 在link$表中查看dblink信息
desc link$
select * from link$;
-- Create sequence 创建序列
create sequence seq_1
minvalue 1
maxvalue 999999999999999999999999999
start with 999
increment by 1
cache 10;
create table bi_gb_config_bak as select * from bi_gb_config
truncate table bi_gb_config
***********************************************************************************************
PL/SQL
PL/SQL语句块结构:
DECLARE
变量、游标、用户定义异常
BEGIN -- 必须的
sql语句
pl/sql语句
EXCEPTION
自定义异常
END -- 必须的
PL/SQL的数据类型
PL/SQL类型
标量类型
数字、字符(单引号界定一个或多个字符)、行标识、日期、布尔(true,false,null)
复合类型
RECORD、NESTED TABLE、INDEX-BY TABLE、VARRAY
引用类型
REF CURSOR、REF OBJECT TYPE
LOB类型
BFILE、CLOB、BLOB
对象类型
OBJECT TYPE
用户定义类型
-- 对boolena表达式注意:
Not null 结果是null
True and null
False and null
True or null
False or null
函数
函数是命名了的、存储在数据库中的PL/SQL程序块。函数接受零个或多个参数,有一个返回值,返回值的数据类型在创建函数时定义。
语法:
Function name[(parameter[,parameter,…]}] return datatypes IS
[local declarations]
Begin
Execute statements
[Exception
Exception handlers]
End [name]
过程
存储过程是一个PL/SQL程序块,接受零个或多个参数作为输入(INPUT)或输出(OUTPUT)、或既作输入又作输出(INOUT),与函数不同,存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用,定义存储过程的语法如下:PROCEDURE name [(parameter[,parameter,...])] IS
[local declarations]
BEGIN
execute statements
[EXCEPTION exception handlers ]
END [name]
包(package)
包是被组合在一起的相关对象的集合,当包中任何函数或存储过程被调用,包就被加载入内存中,包中的任何函数或存储过程的子程序访问速度将大大加快。包由两个部分组成:规范和包主体(body),规范描述变量、常量、游标、和子程序,包体完全定义子程序和游标。
触发器
触发器与一个表或数据库事件联系在一起的,当一个触发器事件发生时,定义在表上的触发器被触发。
create procedure update_com
(v_id in number,v_salary in number default 100) is
begin
update emp1
set id = salary*v_salary
where name='hs';
end
SQLPLUS
实例1:在SQL*Plus中启动和关闭Oracle数据库
启动数据库:
</home/system >sqlplus "/ as sysdba“
SQL>startup
关闭数据库:
</home/system >sqlplus "/ as sysdba“
SQL>shutdown immediate
实例2:在SQL*Plus中创建和删除用户
1. 创建用户:
SQL> create user dywa identified by dywa;
SQL> grant connect,resource to dywa;
identifyed by后面是用户的密码。
2. 删除用户:
SQL> drop user dywa;
如果用户已经拥有对象,那么需要使用下面语句删除用户:
SQL> drop user dywa cascade;
实例3:把sunljh用户中的basetab_ccs表结构和所有数据copy到dywa用户下,用dywa用户登陆,执行:
SQL> copy from sunljh/sunljh@ora9 replace basetab_ccs(saccountnumber,naccountleft,spinnumber) using select saccountnumber,naccountleft,spinnumber from basetab_ccs
实例4:使用SQL*Plus执行文件中的sql语句
1、直接使用命令行执行:
sqlplus –S username/passwd@service_name @SqlFileName
2、在SQL*Plus中执行,直接输入@SqlFileName
实例5:利用sqlplus把oracle数据导出为informix格式的文本文件(shell介绍)
exp是操作系统下一个可执行的文件存放目录/ORACLE_HOME/bin。
exp能够将数据库中数据备份压缩成一个二进制系统文件,该文件可以在不同OS间迁移
它有三种模式:
• 用户模式:导出用户所有对象以及对象中的数据;
• 表模式:导出用户所有表或者指定的表;
• 整个数据库:导出数据库中所有对象。
s
exp常用方法如下:
D:\>exp username/password@service_name tables=(table1,table2,…) file=filename
输入exp help=true可以取得帮助
D:\>exp help=true
Export: Release 9.2.0.1.0 - Production on星期三 7月 28 20:36:57 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
通过输入 EXP 命令和用户名/口令,您可以
后接用户名/口令的命令:
例程: EXP SCOTT/TIGER
实例1:用户模式,导出用户sunljh的所有对象
D:\>exp sunljh/sunljh@ora9 file=sunljh.dmp
实例2:表模式,导出basetab_ccs和test两表的结构和数据,表名用逗号隔开
D:\>exp sunljh/sunljh@ora9 file=tables.dmp tables=basetab_ccs,test
实例3:整个数据库,需要使用dba用户登陆
D:\>exp system/system@ora9 full=true file=database.dmp
实例4:在basetab_ccs里面加上导出basetab_ccs的查询条件saccountnumber= '10000'。
D:\>exp sunljh/sunljh@ora9 tables=basetab_ccs query=\"where saccountnumber=\ '10000\' \" file=c:\sunljh2.dmp
实例5:sunljh.par作为exp的参数文件,里面具体参数可以根据需要去修改
D:\>exp parfile=sunljh.par file=c:\sunljh_1.dmp,c:\sunljh_2.dmp filesize=2000M log=c:\sunljh_exp.log
参数文件sunljh.par内容
userid=sunljh/sunljh@ora9
buffer=8192000
compress=n
grants=y
例子中如果文件sunljh_1.dmp大于2000M,那么剩下的数据会放到另外一个文件sunljh_2.dmp中