??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
return varchar2 is
Result varchar2(100);
tempAddress varchar2(100);
begin
tempAddress := '';
SELECT T.ADDRESS
INTO tempAddress
FROM ADDRESSCODE T
WHERE T.ADDRCODE = STRCODE;
Result := tempAddress;
return Result;
end GET_ADDRESSNAME;
create or replace function FUN_PID15TO18(pid15 in char) return char is
TYPE array_17_number IS VARRAY(17) OF NUMBER;
TYPE array_11_char IS VARRAY(11) OF char;
Result varchar2(18);
v_check_number integer := 0;
v_check_char char(1);
v_factor array_17_number := array_17_number(7,
9,
10,
5,
8,
4,
2,
1,
6,
3,
7,
9,
10,
5,
8,
4,
2);
v_mod array_11_char := array_11_char('1',
'0',
'X',
'9',
'8',
'7',
'6',
'5',
'4',
'3',
'2');
begin
if (length(pid15) = 18) then
return pid15;
elsif (length(pid15) = 15) then
result := substr(pid15, 1, 6) || '19' || substr(pid15, 7, 9);
FOR i IN 1 .. 17 LOOP
v_check_number := to_number(substr(result, i, 1)) * v_factor(i) +
v_check_number;
END LOOP;
v_check_number := mod(v_check_number, 11);
v_check_char := v_mod(v_check_number + 1);
result := result || v_check_char;
return result;
else
raise_application_error(-20001, 'Length of pid should be 15 or 18!');
end if;
end FUN_PID15TO18;
//存储q程
create or replace procedure PROC_ADD_T1 is
v_sqlerrm varchar2(500);
BEGIN
FOR i IN 1 .. 100000 LOOP
INSERT INTO T1 (T1C1, T1C2) VALUES ('TEST' || i, '123456');
END LOOP;
--UPDATE T1 SET T1C1 = '0';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
v_sqlerrm := SUBSTR(SQLERRM, 1, 300);
DBMS_OUTPUT.put_line('ERR=' || v_sqlerrm);
ROLLBACK;
end PROC_ADD_T1;
create or replace procedure PROC_PID15TO18(pid in varchar2, tabName in varchar2) is
v_sqlerrm varchar2(500);
v_sql varchar2(200);
BEGIN
v_sql:='UPDATE ' || tabName || ' SET ' || pid || '=' ||
' CASE WHEN LENGTH(' || pid || ')=15 THEN ' ||
'FUN_PID15TO18(' || pid || ')' ||
' WHEN LENGTH(' || pid || ')=18 THEN ' ||
pid ||
' ELSE ' ||
'''000000000000000000''' ||
' END ';
EXECUTE IMMEDIATE v_sql;
COMMIT;
EXCEPTION
when others then
v_sqlerrm := substr(SQLERRM, 1, 300);
dbms_output.put_line('ERR=' || v_sqlerrm);
rollback;
end PROC_PID15TO18;
create or replace procedure PRO_GETREPORT_PEOPLE is
TYPE cursor_typ IS REF CURSOR;
TYPE array_age_char1 IS VARRAY(7) OF NUMBER;
TYPE array_age_char2 IS VARRAY(7) OF NUMBER;
TYPE array_age_char3 IS VARRAY(7) OF NUMBER;
TYPE array_age_char4 IS VARRAY(7) OF NUMBER;
TYPE array_age_char5 IS VARRAY(7) OF NUMBER;
TYPE array_age_char6 IS VARRAY(7) OF NUMBER;
TYPE array_age_char7 IS VARRAY(7) OF NUMBER;
TYPE array_age_char8 IS VARRAY(7) OF NUMBER;
TYPE array_age_char9 IS VARRAY(7) OF NUMBER;
TYPE array_age_char10 IS VARRAY(7) OF NUMBER;
TYPE array_age_char11 IS VARRAY(7) OF NUMBER;
TYPE array_age_char12 IS VARRAY(7) OF NUMBER;
TYPE array_age_char13 IS VARRAY(7) OF NUMBER;
TYPE array_age_char14 IS VARRAY(7) OF NUMBER;
v_sqlerrm varchar2(500);
strSql varchar2(1000);
cur cursor_typ;
type L_EMP_RECORD is record(
SEX varchar2(50),
AGE number);
L_EMP L_EMP_RECORD;
v_age1 array_age_char1 := array_age_char1(0, 0, 0, 0, 0, 0, 0);
begin
strSql := 'SELECT * FROM (SELECT I.SEX SEX,MONTHS_BETWEEN(SYSDATE,I.BIRTHDAY)/12 AGE FROM INDIVIDUAL I,CONTACT C ' ||
'WHERE I.PID=C.PID AND I.NAME=C.NAME ' ||
'AND C.PROVINCE=''33''' || 'AND C.CITY=''04'') DataAll';
open cur for strSql;
loop
FETCH cur
INTO L_EMP.SEX, L_EMP.AGE;
exit when cur%notfound;
IF (L_EMP.SEX = '01' AND L_EMP.AGE > 3 AND L_EMP.AGE <= 7) THEN
v_age1(2) := v_age1(2) + 1;
END IF;
end loop;
close cur;
dbms_output.put_line('3~7Q男' || ' ' || v_age1(2));
end PRO_GETREPORT_PEOPLE;
<?xml version="1.0" encoding="GBK"?>
<data version="1.0" >
<!--W一位销售员销售明l开?->
<!--主表开?-->
<main>
<id>p1</id>
<name>张三</name>
</main>
<!--主表l束 -->
<!--明细表开?-->
<detail>
<ID>c1</ID>
<ParentID>p1</ParentID>
<productname>产品1</productname>
</detail>
<detail>
<ID>c2</ID>
<ParentID>p1</ParentID>
<productname>产品2</productname>
</detail>
<!--明细表结?-->
<!--W一位销售员销售明l结?->
<!--W二位销售员销售明l开?->
<!--主表开?-->
<main>
<id>p2</id>
<name>李四</name>
</main>
<!--主表l束 -->
<!--明细表开?-->
<detail>
<ID>c3</ID>
<ParentID>p2</ParentID>
<productname>产品3</productname>
</detail>
<detail>
<ID>c4</ID>
<ParentID>p2</ParentID>
<productname>产品4</productname>
</detail>
<!--明细表结?-->
<!--W二位销售员销售明l结?->
</data>
{案:
--销售明lxml生成存储q程
CREATE procedure pageer_rnewlist
(
@hostname varchar(50), --LIP
@dbname varchar(50), --数据库名
@username varchar(50), --用户?br> @password varchar(50), --密码
@xmlpath varchar(50) --xml输出路径
)
begin
--数据库登?br>exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB',@hostname
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,@username,@password
go
declare @errorInfo varchar(200) --错误信息
declare @tempSQL varchar(1000)
--人员信息游标创徏
set @tempSQL = ' declare idCursor cursor for '+ CHAR(13) + CHAR(10)
set @tempSQL = @tempSQL +
' select a.id id,
a.name name,
b.id did,
b.productname pname
from 销售h员表 aQ销售明l表 b
where
b.id = a.parentid
order by a.id '
EXEC (@tempSQL)
--创徏全局临时?br>create table ##tb(re varchar(8000))
INSERT INTO ##tb
--插入头信?br>select '<?xml version="1.0" encoding="GBK"?>
<data version="1.0" >'
INSERT INTO ##tb
--打开游标
OPEN idCursor;
IF(@@CURSOR_ROWS = 0 )
BEGIN
CLOSE idCursor
DEALLOCATE idCursor
set @errorInfo = '没有指定表名或存储过E名Q?
print @errorInfo
return
END
declare @id VARCHAR2(50) = '';
FETCH NEXT FROM CUR_COUNID INTO CUR_COUNID;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
--判断是否存储q的id
IF CUR_COUNID.id <> @id THEN
--主表xml生成
SELECT '<main>'
'<id>'+CUR_COUNID.id+'</id>'
'<name>'+CUR_COUNID.name+'</name>'
'</main>';
INSERT INTO ##tb
ELSE
END IF;
--明细xml生成
SELECT '<detail>'
'<ID>'+CUR_COUNID.did+'</ID>'
'<ParentID>'+CUR_COUNID.id+'</ParentID>'
'<productname>'+CUR_COUNID.productname+'</productname>'
'</detail>';
INSERT INTO ##tb
--保存当前记录id
@id = CUR_COUNID.id;
FETCH NEXT FROM CUR_COUNID INTO CUR_COUNID;
END
CLOSE idCursor
DEALLOCATE idCursor
--生成xml
exec master..xp_cmdshell 'bcp ##tb out ' + @xmlpath
drop table ##tb
--删除链接服务?nbsp;
exec sp_dropserver 'srv_lnk','droplogins'
end
因ؓ(f)Oracle 10g数据库(包括其程序文件、数据库文g{)臛_?x)占?00M左右Q只程序文Ӟ不算数据库文Ӟ的磁盘空间?00M左右Q服务、进E等Q的内存I间Q这是一个不的资源消耗。所以,如果不再需要用它时就可以其卸蝲?/p>
安装Oracle 10g数据库比较简单,但是卸蝲却相当复杂。安装完Oracle 10g后在“d或删除程?#8221;中看到的内容如图1.47所C?/p>
?.47 ?#8220;d或删除程?#8221;中看到的有关Oracle的可删除的程?/p>
昄Q这里只有通常意义的可删除的OracleE序Q而没有Oracle数据库程序。这是因为Oracle数据库程序是靠启动一些服务、进E来提供各项功能的,所以不能单靠这U方法来删除对应的程序文Ӟ而只能靠手动方式来辅助、安排如何删除这些程序文件。这个过E比较繁琐,臛_包括如下几个步骤?/p>
1Q在“开?#8221;@@ “讄”@@ “控制面板”@@ “d或删除程?#8221;中,删除与Oracle 10g有关的程序,如图1.47所C的E序?/p>
2Q在“开?#8221;@@ “讄”@@ “控制面板”@@ “理工具”@@ “服务”中停止与Oracle 10g有关的服务,如图1.48所C?/p>
?.48 停止与Orcale10g有关的服?/p>
3Q在“注册?#8221;中删除与Oracle 10g有关的服务、数据源QODBCQ及光动程序、安装与q行环境有关的注册项。可以先?#8220;oracle”来查找这些注册项Q然后再军_删除Q如?.49所C?/p>
?.49 删除与Orcale10g有关的服务的注册?/p>
4Q在“我的?sh)?#8221;@@ “属?#8221;@@ “高”@@ “环境变量”中删除与Oracle 10g有关的环境变量,如图1.50所C?/p>
?.50 删除与Orcale10g有关的环境变?/p>
5Q在“C:\Documents and Settings\All Users\「开始」菜单\E序”目录中删除与Oracle有关的程序菜单(或直接在E序l的菜单中将其删除)Q如?.51所C?/p>
?.51 删除与Oracle有关的程序菜?/p>
6Q删?#8220;C:\Program Files\Oracle\Inventory”目录。此目录中记录了上一ơ安装Oracle时的信息。如果不其删除Q则再次安装Oracle时会(x)出现错误?/p>
7Q重新启动计机pȝ。其目的是不会(x)再有?Oracle启动的那些服务、进E了。只有这h能删除某些特D的文gҎ(gu)某些Ҏ(gu)的文Ӟ?#8220;C:\oracle\product\10.1.0\ db_1\jdk\bin\java.exe”。否则在删除它们时会(x)出现cM如图1.52所C的提示H口?/p>
?.52 在没有停止或删除相关的服务、进E就删除某些文gҎ(gu)文g时的错误提示
8Q按先删除子文g夹再删除父文件夹的方式(不要一ơ删除太多的文gҎ(gu)文gQ,逐步删除按OFA规则安装的所有Oracle数据库Y件文件?/p>
如何?/span>Windows上完全卸?/span>Oracle数据库(8i?/span>9iQ?/span>
(卫志?/u>)
<!--[if !supportLists]-->1?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> <!--[endif]-->删除注册标的内容
如图Q?/p>
出现Q?/p>
然后删除所选的Oracle
下面删除Oracle服务Q?/p>
在ControlSet001、ControlSet002、CurrentControlSet-->Service中删除相关的Oracle服务?/p>
<!--[if !supportLists]-->2?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"> <!--[endif]-->删除Oracle软g所在的目录
Oracle软g的有些配|信息存储在q个目录QC:\Program Files\OracleQ:(x)
然后再删除Y件安装的实际目录Q如果删除中Q出C能删除的文gQ请l它改名Q然后重新启动操作系l,
再删除这些文件。这h们就d删除了有关的文gQ对以后安装Oracle数据库没有Q何媄响?/p>
如果你用Oracle的卸载程序,首先Q用database configuration assistant工具删除所建立的数据库Q这样就删除了数据库的数据文Ӟ
但是不能删除Oracle可执行的文g。如果想删除的干q净净Q用上面的方法?br>
软g环境Q?
1、Windows 2000+ORACLE 8.1.7
2、ORACLE安装路径为:(x)C:\ORACLE
实现Ҏ(gu)Q?
1?开始-Q设|-Q控刉板-Q管理工PQ服?
停止所有Oracle服务?
2?开始-Q程序-QOracle - OraHome81Q>Oracle Installation ProductsQ>
Universal Installer
卸装所有Oracle产品Q但Universal Installer本n不能被删?
5?q行regeditQ选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLEQ按del键删除这个入口?
6?q行regeditQ选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ServicesQ滚?
q个列表Q删除所有Oracle入口?
7?q行refeditQ?
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\ApplicationQ?
删除所有Oracle入口?
8?开始-Q设|-Q控刉板-Q系l-Q高U-Q环境变?
删除环境变量CLASSPATH和PATH中有关Oracle的设?
9?从桌面上、STARTUPQ启动)l、程序菜单中Q删除所有有关Oracle的组和图?
10?删除\Program Files\Oracle目录
11?重新启动计算机,重v后才能完全删除Oracle所在目?
12?删除与Oracle有关的文Ӟ选择Oracle所在的~省目录C:\OracleQ删除这个入
口目录及所有子目录Qƈ从Windows 2000目录Q一般ؓ(f)C:\WINNTQ下删除以下?
件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini{等?
13?WIN.INI文g中若有[ORACLE]的标记段Q删除该D?
14?如有必要Q删除所有Oracle相关的ODBC的DSN
15?C件查看器中,删除Oracle相关的日?
说明Q?
如果有个别DLL文g无法删除的情况,则不用理?x),重新启动Q开始新的安装,
安装Ӟ选择一个新的目录,则,安装完毕q新启动后Q老的目录及文件就可以删除掉了
Windows 2000
[HKEY_LOCAL_MACHINE\SOFTWARE\
Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="oraclient8.dll"
"OracleSqlLib"="orasql8.dll"
"OracleOciLib"="oci.dll"
oracle 8.1
Windows NT ?Windows 9x
[HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Transaction Server\Local Computer\My Computer]
"OracleXaLib"="oraclient8.dll"
"OracleSqlLib"="orasql8.dll"
"OracleOciLib"="oci.dll"
创徏表空间案?/span>
本文通过一个例子说明如何创I间 tstest Qƈ且创Z个用?/span> sam Q可以对该表I间的具备操作权限?/span>
sys 用户?/span> dba w䆾d sql*plus worksheet ?/span>
-- 注释Q?/span> Create tablespace --revoke "DBA" from sam --drop tablespace tstest including contents and datafiles; --drop user sam CASCADE;
CREATE TABLESPACE "tstest" LOGGING DATAFILE 'D:/oracle/oradata/OAERP/TSTEST.ORA' SIZE REUSE EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;
CREATE USER "SAM" PROFILE "DEFAULT" IDENTIFIED BY "1qa2ws3ed" DEFAULT TABLESPACE "TSTEST" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;
grant connect to "SAM" with admin option; ALTER USER "SAM" DEFAULT ROLE ALL;
grant create procedure to SAM; grant create sequence to SAM; grant create table to SAM; grant create view to SAM;
grant drop any procedure to SAM; grant drop any sequence to SAM; grant drop any table to SAM; grant drop any view to SAM;
alter user SAM quota unlimited on TSTEST; |
create tablespace songxianfei
datafile 'd:/oracle/sxf.def' size 500M
autoextend on next 10M maxsize unlimited logging
extent management local autoallocate
segment space management auto;
最好用下面q一?上面哪一个在oracle10G上不?/p>
1.删除所有(f)时文Ӟ(x)purge recyclebin
}
-- Create sequence
create sequence SEQ_JXUSER
minvalue 1
maxvalue 99999999
start with 5941
increment by 1
cache 20;
触发器是一U特D的存储q程Q它在插入,删除或修改特定表中的数据时触发执行,它比数据库本w标准的功能有更_和更复杂的数据控制能力。数据库触发器有以下的作用:(x)
* 安全性。可以基于数据库的g用户h操作数据库的某种权利?/p>
# 可以Z旉限制用户的操作,例如不允怸班后和节假日修改数据库数据?/p>
# 可以Z数据库中的数据限制用L(fng)操作Q例如不允许股票的h(hun)格的升幅一ơ超q?0%?/p>
* 审计。可以跟t用户对数据库的操作?/p>
# 审计用户操作数据库的语句?/p>
# 把用户对数据库的更新写入审计表?/p>
* 实现复杂的数据完整性规则?/p>
# 实现非标准的数据完整性检查和U束。触发器可生比规则更ؓ(f)复杂的限制。与规则不同Q触发器可以引用列或数据库对象。例如,触发器可回退M企图吃进过自己保证金的期货?/p>
# 提供可变的缺省倹{?/p>
* 实现复杂的非标准的数据库相关完整性规则。触发器可以Ҏ(gu)据库中相关的表进行连环更新。例如,在auths表author_code列上的删除触发器可导致相应删除在其它表中的与之匹配的行?/p>
# 在修Ҏ(gu)删除时联修Ҏ(gu)删除其它表中的与之匹配的行?/p>
# 在修Ҏ(gu)删除时把其它表中的与之匹配的行设成NULL倹{?/p>
# 在修Ҏ(gu)删除时把其它表中的与之匹配的行联设成缺省倹{?/p>
# 触发器能够拒l或回退那些破坏相关完整性的变化Q取消试图进行数据更新的事务。当插入一个与其主健不匚w的外部键Ӟq种触发器会(x)起作用。例如,可以在books.author_code列上生成一个插入触发器Q如果新gauths.author_code列中的某g匚wӞ插入被回退?/p>
* 同步实时地复制表中的数据?/p>
* 自动计算数据|如果数据的DC一定的要求Q则q行特定的处理。例如,如果公司的帐号上的资金低?万元则立即给财务人员发送警告数据?/p>
ORACLE与SYBASE数据库的触发器有一定的区别Q下面将分别讲述q两U数据库触发器的作用和写法?/p>
?ORACLE 触发?/p>
ORACLE产生数据库触发器的语法ؓ(f)Q?/p>
create [or replace] trigger 触发器名 触发旉 触发事g
on 表名
[for each row]
pl/sql 语句
其中Q?/p>
触发器名Q触发器对象的名U。由于触发器是数据库自动执行的,因此该名U只是一个名Uͼ没有实质的用途?/p>
触发旉Q指明触发器何时执行Q该值可取:(x)
before---表示在数据库动作之前触发器执行;
after---表示在数据库动作之后出发器执行?/p>
触发事gQ指明哪些数据库动作?x)触发此触发器?x)
insertQ数据库插入?x)触发此触发器?/p>
updateQ数据库修改?x)触发此触发器?/p>
deleteQ数据库删除?x)触发此触发器?/p>
?名:(x)数据库触发器所在的表?/p>
for each rowQ对表的每一行触发器执行一ơ。如果没有这一选项Q则只对整个表执行一ơ?/p>
举例Q下面的触发器在更新表auths之前触发Q目的是不允许在周末修改表:(x)
create trigger auth_secure
before insert or update or delete //Ҏ(gu)表更新前触发
on auths
begin
if(to_char(sysdate,'DY')='SUN'
RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');
end if;
end
?SYBASE数据库触发器
SYBASE数据库触发器的作用与ORACLE非常cMQ仅有较?yu)的差异?/p>
SYBASE产生触发器的语法为:(x)
CREATE TRIGGER 触发器名
ON 表名
FOR INSERTQUPDATEQDELETE
AS
SQL_statement |
FOR INSERTQUPDATE
AS
IF UPDATE(column_name) [AND|OR UPDATE(column_name)]...
SQL_statements
上面FOR子句用来指定在触发器上的哪些数据更新命o(h)可激z该触发器。IF UPDATE子句查对指定列的操作cdQ在IF UPDATE子句中可指定多个列?/p>
与ORACLE不同Q对于每条SQL语句Q触发器只执行一ơ。触发器在数据更新语句完成以后立x行。触发器和启动它的语句被当作一个事务处理,事务可以在触发器中回退?/p>
下面举例说明SYBASE触发器的写法?/p>
create trigger forinsert_books
on books
for insert
as
if(select count(*) from auths,inserted
where auths.author_code=insert.author_code)!=@@rowcount
begin
rollback transaction
print "books 表中 author_code 列的值在auths 表中不存在?
end
/*****************************存储q程****************************************/
CREATE OR REPLACE PROCEDURE CntWord( /* ADD 00.06.01 */
piInstr IN VARCHAR2,
piSep IN VARCHAR2,
poOutCnt OUT NUMBER
) IS
Cnt NUMBER ;
i NUMBER ;
BEGIN
Cnt := 0 ;
i := 1 ;
poOutCnt := 0 ;
LOOP
i := INSTR (piInstr,piSep,i) ;
exit when i = 0 ;
If i > 0 Then
Cnt := Cnt + 1 ;
i := i + LENGTH(piSep) ;
End If ;
exit when i > LENGTH(piInstr) ;
END LOOP ;
poOutCnt := Cnt ;
EXCEPTION WHEN OTHERS THEN
poOutCnt := 0 ;
End CntWord ;
/*************************************触发?********************************************/
create or replace trigger JNLADMBED
after insert or delete on A_ADMBED
for each row
begin
if deleting then
insert into m_masterjnl (seq,opmode,tablename,key,updatedate)
values( a_masterjnlseq.nextval,'D','ADMBED',
'WARDCODE=''' ||:old.WARDCODE ||''||''''||
' and ROOMCODE=''' ||:old.ROOMCODE ||''||''''||
' and BEDCODE=''' ||:old.BEDCODE ||''||''''||
'',sysdate);
else
insert into m_masterjnl (seq,opmode,tablename,key,updatedate)
values( a_masterjnlseq.nextval,'U','ADMBED',
'WARDCODE=''' ||:new.WARDCODE ||''||''''||
' and ROOMCODE=''' ||:new.ROOMCODE ||''||''''||
' and BEDCODE=''' ||:new.BEDCODE ||''||''''||
'',sysdate);
end if;
end;
?/span>
DOS
环境?/span>
,
打入
Sqlplus/nolog
Connect system/system as sysdba
Create user smile identified by smile;//
Grant dba to smile with admin option;
导入数据q入
A,imp smile/smile@A file=c:\bb.bmp
imp system/manager@TEST file=d:\daochu.dmp
full=y
数据
?/span>
出:(x)
1
数?/span>
?/span>
TEST
完全
?/span>
?/span>
,
?/span>
?/span>
?/span>
system
?/span>
?/span>
manager
?/span>
出到
D:\daochu.dmp
?span lang="EN-US"> exp system/manager@TEST file=d:\daochu.dmp full=y 2 数?/span>
?/span>
?/span>
system
?/span>
?/span>
?/span>
sys
?/span>
?/span>
的表
?/span>
?/span>
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys) 3
数?/span>
?/span>
中的?/span>
table1
?span lang="EN-US">table2
?/span>
?/span>
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) 4
数?/span>
?/span>
中的?/span>
table1
中的字段filed1?span lang="EN-US">00?/span>
?/span>
的数?/span>
?/span>
?/span>
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\ where filed1 like 00%\
上面是常用的
?/span>
出,
?/span>
?/span>
压羃
我不太在意,?/span>
winzip
?span lang="EN-US">dmp文g可以很好?/span>
压羃
?/span>
?/span>
q?/span>
在上面命令后?/span>
加上 compress=y 可以了 数据?/span>
?/span>
?/span>
1
?span lang="EN-US">D:\daochu.dmp 中的数据
?/span>
?/span>
TEST
数据
?/span>
中?/span>
imp system/manager@TEST file=d:\daochu.dmp
上面可能有点
问题
Q因
?/span>
有的表已
l?/span>
存在Q然后它?yu)?/span>
报错
Q?/span>
对该
表就?/span>
q?/span>
?/span>
?/span>
入?/span>
在后面加?span lang="EN-US"> ignore=y 可以了?span lang="EN-US"> 2 ?span lang="EN-US">d:\daochu.dmp中的?span lang="EN-US">table1
?/span>
?/span>
imp system/manager@TEST file=d:\daochu.dmp tables=(table1) 基本上上面的
?/span>
?/span>
?/span>
?/span>
?/span>
用了?/span>
不少情况我是表
?/span>
?/span>
?/span>
除,然后
?/span>
入?/span>
注意Q?/span>
你要有
?/span>
?/span>
?/span>
限,
?/span>
限不
?/span>
它会(x)提示你?/span>
数据
库时
可以
q?/span>
上的。可以用
tnsping TEST
?/span>
?/span>
得数?/span>
?/span>
TEST
能否
q?/span>
上?/span>
2) 创徏 : User Q?/span> smile
Pass
Q?/span>
smile
两种Ҏ(gu)
:1.
命o(h)行方?/span>
:dos
?/span>
我的步骤是这L(fng)
:
注意我ؓ(f)什么用的是
system/system
登陆
???
因ؓ(f)我已l改q?/span>
system
的密码了
,
此时你在
Oracle Enterprise Manager
中可以看C建立?/span>
smile
用户名和密码
.
双击
SMILE,
你可以看C讄的权限已生效
,
其实你可以直接在q里改也可以
,
不用命o(h)行方?/span>
.
下面可以导入数据了
:
注意导入数据是在
dos
下进行的
,
是非
sql/plus
?/span>
!
?/span> dos 下输?/span> imp help=y 回R !// dos 下运?/span> imp help=y
是
试
个命令在
dos
下能不能q行Q就是和
javac
意思一
?/span>
的?/span>
然后可以导入导出文件了
!
C:\>imp smile/smile@orcl
.DMP"
׃我们用的?/span>
9i,
上v那边用的
?/span>
oracle
?/span>
?/span>
下搜?/span>
exp.exe
Q?/span>
imp.exe
?/span>
bin
?/span>
?/span>
?/span>
;
?/span>
java
下的
javac,java
一?/span>
,
各个公司的品都是这?/span>
,
你看我的
,
我看你的
!
导出和导入的命o(h)差不?/span>
!
exp smile/smile@orcl
buffer=2000000 full=y file=c:\a.dmp log=c:\a.log
你的文g导入C
c
盘下?/span>
!
看我的结果吧
!
一个表I间只能属于一个数据库
每个数据库最有一个控制文Ӟ3个,分别攑֜不同的磁盘上Q?
每个数据库最有一个表I间QSYSTEM表空_(d)
建立SYSTEM表空间的目的是尽量将目的相同的表存放在一P以提高用效率,只应存放数据字典
每个数据库最有两个联机日志l,每组最一个联机日志文?
一个数据文件只能属于一个表I间
一个数据文件一旦被加入C个表I间中,׃能再从这个表I间中移赎ͼ也不能再加入到其他表I间?
建立新的表空间需要徏立新的数据文?
数据文g被ORACLE格式化ؓ(f)ORACLE块,Oracle9i以前版本中,ORACLE块的大小是在W一ơ创建数据库时设定的Qƈ且以后不能改变,要想改变Q只能重建数据库
一个段segment只能属于一个表I间Q但可以属于多个数据文g
一个区extent只能属于一个数据文Ӟ卛__(d)extentQ不能跨数据文?
PCTFREE和PCTUSEDd不能大于{于100
单独一个事务不能跨多个回滚段
索引表不含ROWID?
拥有不同大小的回滚段没有M益处
COMMIT后,数据不一定立卛_盘(数据文gQ?
一个事务即使不被提交,也会(x)被写入到重做日志中?
Oracle 8.0.4中,在初始安装时建立的缺省数据库Q实例名为ORCL
一个块的最大长度ؓ(f)16KB(?K?K?K?6K)
每个数据库最大文件数Q按块大)
2K?0000个文?br />
4K?0000个文?br />
8K块或以上 65536个文?br />
oracle server可以同时启动多个数据?
一套操作系l上可以安装多个版本的ORACLE数据库系l(UNIX可以QNT不可以)
一套ORACLE数据库系l中可以有多个ORACLE数据库及其相对应的实?
每个ORACLE数据库拥有一个数据库实例QINSTANCEQ(OPS除外Q所以,一套操作系l上同时可以有多个oracle数据库实例启动?
//Oracle8 数据cd
char(n) n=1 to 2000字节 定长字符Ԍn字节长,如果不指定长度,~省?个字节长Q一个汉字ؓ(f)2字节Q?
varchar2(n) n=1 to 4000字节 可变长的字符Ԍ具体定义时指明最大长度nQ?br />
q种数据cd可以放数字、字母以及ASCII码字W集(或者EBCDIC{数据库pȝ接受的字W集标准)中的所有符受?br />
如果数据长度没有辑ֈ最大值nQOracle 8i?x)根据数据大自动调节字D长度,
如果你的数据前后有空|Oracle 8i?x)自动将其删厅RVARCHAR2是最常用的数据类型?br />
可做索引的最大长?209?
number(m,n) m=1 to 38
n=-84 to 127 可变长的数值列Q允?、正值及负|m是所有有效数字的位数Qn是小数点以后的位数?br />
如:(x)number(5,2)Q则q个字段的最大值是99,999Q如果数DZ位数限制׃(x)被截取多余的位数?br />
如:(x)number(5,2)Q但在一行数据中的这个字D输?75.316Q则真正保存到字D中的数值是575.32?br />
如:(x)number(3,0)Q输?75.316Q真正保存的数据?75。 ?br />
date ?从公元前4712q??日到公元4712q?2?1日的所有合法日期,
Oracle 8i其实在内部是?个字节来保存日期数据Q在定义中还包括时、分、秒?br />
~省格式为DD-MON-YYQ如07-11?00 表示2000q?1?日。 ?br />
long ?可变长字W列Q最大长度限制是2GBQ用于不需要作字符串搜索的长串数据Q如果要q行字符搜烦p用varchar2cd?br />
long是一U较老的数据cdQ将来会(x)逐渐被BLOB、CLOB、NCLOB{大的对象数据类型所取代。 ?br />
raw(n) n=1 to 2000 可变长二q制数据Q在具体定义字段的时候必L明最大长度nQOracle 8i用这U格式来保存较小的图形文件或带格式的文本文gQ如Miceosoft Word文档?br />
raw是一U较老的数据cdQ将来会(x)逐渐被BLOB、CLOB、NCLOB{大的对象数据类型所取代。 ?br />
long raw ?可变长二q制数据Q最大长度是2GB。Oracle 8i用这U格式来保存较大的图形文件或带格式的文本文gQ如Miceosoft Word文档Q以及音频、视频等非文本文件?br />
在同一张表中不能同时有longcd和long rawcdQlong raw也是一U较老的数据cdQ将来会(x)逐渐被BLOB、CLOB、NCLOB{大的对象数据类型所取代。 ?br />
blob
clob
nclob ?三种大型对象(LOB)Q用来保存较大的囑Ş文g或带格式的文本文Ӟ如Miceosoft Word文档Q以及音频、视频等非文本文Ӟ最大长度是4GB?br />
LOB有几U类型,取决于你使用的字节的cdQOracle 8i实实在在地将q些数据存储在数据库内部保存?br />
可以执行d、存储、写入等Ҏ(gu)操作。 ?br />
bfile ?在数据库外部保存的大型二q制对象文gQ最大长度是4GB?br />
q种外部的LOBcdQ通过数据库记录变化情况,但是数据的具体保存是在数据库外部q行的?br />
Oracle 8i可以d、查询BFILEQ但是不能写入?br />
大小由操作系l决定。 ?/p>
SQL(Structured Query Language)语句分类
DDL、数据定义语aQcreate、alter、drop、truncateQ创建、修改结构、删除、截断)Q其他:(x)renameQ?br />
DML、数据操U语aQinsert、delete、select、updateQ增、删、查、改Q?br />
DCL、数据控制语aQgrant、revokeQ授权、回Ӟ、set role
事务控制Qcommit、rollback、savepointQ其他:(x)lock table、set constraint(s)、set transactionQ?br />
审计控制Qaudit、noaudit
pȝ控制Qalter system
?x)话控制Qalter session
其他语句QcommentQ添加注释)、explain plan、analyzeQ收集统计)、validate、call
//SQL*Plus中运行的几种命o(h)
1. SQL*Plus命o(h) 一般用来格式化查询输出、设|环境、编辑存储SQL命o(h)和PL/SQL?br />
SQL> show user
SQL> select user from dual;
2. SQL命o(h)
SQL> select * from tab;
3. PL/SQL?br />
SQL> BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World!');
END;
//Oracle中实现某一字段自动增加1
create sequence 序列?
increment by 1
start with 1
maxvalue 999999999
cycle;
当向表中插入数据ӞSQL语句写法如下Q?br />
SQL> insert into 表名 values(序列?nextval,????;
Q?Q图6.26所CZؓ(f)初始化参数的【归档】选项卡?br />
Q?Q图6.27所CZؓ(f)初始化参数的【数据库大小】选项卡?br />
Q?Q图6.28所CZؓ(f)初始化参数的【文件位|】选项卡?br />
Q?0Q出现如?.29所C的【数据库存储】界面?br /> Q?1Q出现如?.30所C的【创建选项】界面?br />
Q?2Q出现如?.31所C的【概要】界面?br /> Q?2Q出现如?.31所C的【概要】界面?br />
Q?4Q出现如?.33所C的【成功创建数据库】界面?br />
6.6.2 创徏的数据库的参?br /> 打开C:\ORACLE\ADMIN\TEMPDB\PFILE\IN99v.ORA文gQ可以查看最重要的初始化参数的设|如下?br /> 【参见配套文件】:(x)\W?章\int.ora?br /> ――――――――――――――――――――――――――――――――――――?br /> # Copyright (c) 1991, 2001 by Oracle Corporation
# MTS
dispatchers="(PROTOCOL=TCP)(SER=MODOSE)",
"(PROTOCOL=TCP)(PRE=oracle.aurora.server.GiopServer)",
"(PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)"
# 其他
compatible=9.0.0
db_name=TEMPDB
# 分布? 复制和快?br /> db_domain=MYNET
remote_login_passwordfile=EXCLUSIVE
# 归档
log_archive_dest_1='LOCATION=C:\oracle\oradata\TEMPDB\archive'
log_archive_format=%t_%s.dbf
log_archive_start=true
# 排序, 散列联接, 位图索引
sort_area_size=524288
# 文g配置
control_files=("C:\oracle\oradata\TEMPDB\CONTROL01.CTL"
1. 建立数据库DB2_GCB
CREATE DATABASE DB2_GCB ON G: ALIAS DB2_GCB
USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM DFT_EXTENT_SZ 32
2. q接数据?
connect to sample1 user db2admin using 8301206
3. 建立别名
create alias db2admin.tables for sysstat.tables;
CREATE ALIAS DB2ADMIN.VIEWS FOR SYSCAT.VIEWS
create alias db2admin.columns for syscat.columns;
create alias guest.columns for syscat.columns;
4. 建立?
create table zjt_tables as
(select * from tables) definition only;
create table zjt_views as
(select * from views) definition only;
5. 插入记录
insert into zjt_tables select * from tables;
insert into zjt_views select * from views;
6. 建立视图
create view V_zjt_tables as select tabschema,tabname from zjt_tables;
7. 建立触发?
CREATE TRIGGER zjt_tables_del
AFTER DELETE ON zjt_tables
REFERENCING OLD AS O
FOR EACH ROW MODE DB2SQL
Insert into zjt_tables1 values(substr(o.tabschema,1,8),substr(o.tabname,1,10))
8. 建立唯一性烦?
CREATE UNIQUE INDEX I_ztables_tabname
[size=3]ON zjt_tables(tabname);
9. 查看?
select tabname from tables
where tabname='ZJT_TABLES';
10. 查看?
select SUBSTR(COLNAME,1,20) as 列名,TYPENAME as cd,LENGTH as 长度
from columns
where tabname='ZJT_TABLES';
11. 查看表结?
db2 describe table user1.department
db2 describe select * from user.tables
12. 查看表的索引
db2 describe indexes for table user1.department
13. 查看视图
select viewname from views
where viewname='V_ZJT_TABLES';
14. 查看索引
select indname from indexes
where indname='I_ZTABLES_TABNAME';
15. 查看存贮q程
SELECT SUBSTR(PROCSCHEMA,1,15),SUBSTR(PROCNAME,1,15)
FROM SYSCAT.PROCEDURES;
16. cd转换(cast)
ip datatype:varchar
select cast(ip as integer)+50 from log_comm_failed
17. 重新q接
connect reset
18. 中断数据库连?
disconnect db2_gcb
19. view application
LIST APPLICATION;
20. kill application
FORCE APPLICATION(0);
db2 force applications all (所有应用程序从数据库断开)
21. lock table
lock table test in exclusive mode
22. ׃n
lock table test in share mode
23. 昄当前用户所有表
list tables
24. 列出所有的pȝ?
list tables for system
25. 昄当前zd数据?
list active databases
26. 查看命o(h)选项
list command options
27. pȝ数据库目?
LIST DATABASE DIRECTORY
28. 表空?
list tablespaces
29. 表空间容?
LIST TABLESPACE CONTAINERS FOR
Example: LIST TABLESPACE CONTAINERS FOR 1
30. 昄用户数据库的存取权限
GET AUTHORIZATIONS
31. 启动实例
DB2START
32. 停止实例
db2stop
33. 表或视图Ҏ(gu)
grant select,delete,insert,update on tables to user
grant all on tables to user WITH GRANT OPTION
34. E序包特?
GRANT EXECUTE
ON PACKAGE PACKAGE-name
TO PUBLIC
35. 模式Ҏ(gu)
GRANT CREATEIN ON SCHEMA SCHEMA-name TO USER
36. 数据库特?
grant connect,createtab,dbadm on database to user
37. 索引Ҏ(gu)
grant control on index index-name to user
38. 信息帮助 (? XXXnnnnn )
?? SQL30081
39. SQL 帮助(说明 SQL 语句的语?
help statement
例如Qhelp SELECT
40. SQLSTATE 帮助(说明 SQL 的状态和cd代码)
? sqlstate ?? class-code
41. 更改?理服务?相关的口?
db2admin setid username password
42. 创徏 SAMPLE 数据?
db2sampl
db2sampl F:(指定安装?
43. 使用操作pȝ命o(h)
! dir
44. 转换数据cd (cast)
SELECT EMPNO, CAST(RESUME AS VARCHAR(370))
FROM EMP_RESUME
WHERE RESUME_FORMAT = 'ascii'
45. UDF
要运?DB2 Java 存储q程?UDFQ还需要更新服务器上的 DB2 数据库管理程序配|,以包括在该机器上安装 JDK 的\?
db2 update dbm cfg using JDK11_PATH d:sqllibjavajdk
TERMINATE
update dbm cfg using SPM_NAME sample
46. ?DB2 数据库管理程序配|?
db2 get dbm cfg
47. 索具有特权的所有授权名
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'DATABASE' FROM SYSCAT.DBAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'TABLE ' FROM SYSCAT.TABAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'PACKAGE ' FROM SYSCAT.PACKAGEAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'INDEX ' FROM SYSCAT.INDEXAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'COLUMN ' FROM SYSCAT.COLAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SCHEMA ' FROM SYSCAT.SCHEMAAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SERVER ' FROM SYSCAT.PASSTHRUAUTH
ORDER BY GRANTEE, GRANTEETYPE, 3
create table yhdab
(id varchar(10),
password varchar(10),
ywlx varchar(10),
kh varchar(10));
create table ywlbb
(ywlbbh varchar(8),
ywmc varchar(60))
48. 修改表结?
alter table yhdab ALTER kh SET DATA TYPE varchar(13);
alter table yhdab ALTER ID SET DATA TYPE varchar(13);
alter table lst_bsi alter bsi_money set data type int;
insert into yhdab values
('20000300001','123456','user01','20000300001'),
('20000300002','123456','user02','20000300002');
49. 业务cd说明
insert into ywlbb values
('user01','业务甌'),
('user02','业务撤消'),
('user03','费用查询'),
('user04','费用自缴'),
('user05','费用预存'),
('user06','密码修改'),
('user07','发票打印'),
('gl01','改用户基本信?),
('gl02','更改支付信息'),
('gl03','日统计功?),
('gl04','冲帐功能'),
('gl05','对帐功能'),
('gl06','计费功能'),
('gl07','l合l计')