当前位置:首页 » 编程语言 » oraclesql手册

oraclesql手册

发布时间: 2022-12-30 12:48:34

A. oracle数据库sql

1、写出创建此数据库表的sql语句(student,course,score三个表任意写一个创建语句)
CREATE TABLE STUDENT
(
stu_id VARCHAR2(20),
name VARCHAR2(20),
Age INTEGER,
sex CHAR(2),
stu_class VARCHAR2(12)

)
2、给表course的课程号(co_id)字段添加主键约束,给成绩表score的课程号(co_id)字段添加外键约束,其中主表是course,从表示score,写出sql语句
ALTER TABLE COURSE ADD CONSTRAINT COURSE_P_COID PRIMARY KEY (CO_ID);
ALTER TABLE SCORE ADD CONSTRAINT SCORE_F_COID FOREIGN KEY(CO_ID) REFERENCES COURSE(CO_ID) ;

3、向score表中插入一条记录,写出此sql语句
INSERT INTO SCORE VALUES ('1111000',1,90);

4、查询课程成绩大于80分的学生姓名和课程名,写出sql语句
SELECT B.NAME,C.CO_NAME FROM SCORE A,STUDENT B,COURSE C
WHERE A.STU_ID=B.STU_ID
AND A.CO_ID=C.CO_ID
AND A.SCORE>80
5、编写函数返回女同学的平均课程成绩是多少(女同学:sex=’ 女),写出sql语句
CREATE OR REPLACE FUNCTION FUN_GETSCORE
RETURN NUMBER
IS
V_SCORE NUMBER;

BEGIN
SELECT AVG(A.SCORE) INTO V_SCORE FROM SCORE A,STUDENT B
WHERE A.STU_ID=B.STU_ID
AND B.SEX='女';
RETURN V_SCORE;
END;
6、编写存储过程,更新学生成绩表score的课程成绩(score)字段,更新语句为:update score set score=newscore where stu_id=stuid and co_id=coid其中新的成绩,学号,课程号作为传人的形式参数,定义为:newscore in number,stuid in varchar2,coid in varchar2,写出此sql语句
CREATE OR REPLACE PROCEDURE P_UPDATE_SCORE(newscore in number,stuid in varchar2,coid in varchar2)
AS

BEGIN
update score set score=newscore where stu_id=stuid and co_id=coid;
COMMIT;
END;

B. 怎么在oracle sqldeveloper 找plsql开发手册

1
首先确保有oracle数据库或者有oracle服务器,然后才能使用PLSQL Developer连接数据库。

2
启动PLSQL Developer,登陆oracle用户账号后连接(这里不详细介绍如何配置tnsname.ora)了。

3
登陆成功后即可进入对象浏览器窗口界面

4
在对象浏览器选择“my object”,这里边就是SCOTT(当前登陆的用户的所有object)

5
找到table文件夹,里边就是当前账户的所有表格

C. 数据库手册:Oracle维护常用SQL语句二

回滚段查看 select rownum sys dba_rollback_segs segment_name Name v$rollstat extentsExtents v$rollstat rssize Size_in_Bytes v$rollstat xacts XActs v$rollstat gets Gets v$rollstat waits Waits v$rollstat writes Writes sys dba_rollback_segs status status from v$rollstat sys dba_rollback_segs v$rollname where v$rollname name(+) = sys dba_rollback_segs segment_name andv$rollstat usn (+) = v$rollname usn order by rownum 耗资源的进程(top session) select s schemaname schema_name decode(sign( mand) to_char(mand) Action Code # || to_char(mand) ) action statussession_status s osuser os_user_name s sid p spid s serial# serial_num nvl(s username [Oracle process] ) user_name s terminal terminal s program program st value criteria_value from v$sesstat st v$session s v$process pwhere st sid = s sid and st statistic# = to_number( ) and ( ALL = ALL or s status = ALL ) and p addr = s paddr order by st value desc p spid asc s username asc s osuser asc 查看锁(lock)情况 select /*+ RULE */ ls osuser os_user_name ls username user_name decode(ls type RW Row wait enqueue lock TM DML enqueue lock TX Transaction enqueue lock UL User supplied lock ) lock_type o object_name object decode(ls lmode null Row Share Row Exclusive Share Share Row Exclusive Exclusive null)lock_mode o owner ls sid ls serial# serial_num ls id ls id from sys dba_objects o ( select s osuser s username l type l lmode s sid s serial# l id l id from v$session s v$lock l where s sid = l sid ) ls where o object_id = ls id and o owner<> SYS order by o owner o object_name 查看等待(wait)情况 SELECT v$waitstat class v$unt count SUM(v$sysstat value) sum_valueFROM v$waitstat v$sysstat WHERE v$sysstat name IN ( db block gets consistent gets ) group by v$waitstat class v$unt 查看sga情况 SELECT NAME BYTES FROM SYS V_$SGASTAT ORDER BY NAME ASC 查看catched object SELECT owner name db_link namespace type sharable_mem loads executions locks pins kept FROM v$db_object_cache 查看V$SQLAREA SELECT SQL_TEXT SHARABLE_MEM PERSISTENT_MEM RUNTIME_MEM SORTS VERSION_COUNT LOADED_VERSIONS OPEN_VERSIONS USERS_OPENING EXECUTIONS USERS_EXECUTING LOADS FIRST_LOAD_TIME INVALIDATIONS PARSE_CALLS DISK_READS BUFFER_GETS ROWS_PROCESSED FROM V$SQLAREA 查看object分类数量 select decode (o type# INDEX TABLE CLUSTER VIEW SYNONYM SEQUENCE OTHER ) object_type count(*) quantity fromsys obj$ o where o type# > group by decode (o type# INDEX TABLE CLUSTER VIEW SYNONYM SEQUENCE OTHER ) union select COLUMN count(*) from l$ union select DB LINK count(*) from 按用户查看object种类 select u name schema sum(decode(o type# NULL)) indexes sum(decode(o type# NULL)) tables sum(decode(o type# NULL))clusters sum(decode(o type# NULL)) views sum(decode(o type# NULL)) synonyms sum(decode(o type# NULL)) sequences sum(decode(o type# NULL NULL NULL NULL NULL NULL ))others from sys obj$ o sys user$ u where o type# >= and u user# =o owner# and u name <> PUBLIC group by u name order bysys link$ union select CONSTRAINT count(*) from n$ 有关connection的相关信息 )查看有哪些用户连接select s osuser os_user_name decode(sign( mand) to_char(mand) Action Code # || to_char(mand) ) action p program oracle_process status session_status s terminal terminal s program program s username user_name s fixed_table_sequence activity_meter query memory max_memory cpu_usage s sid s serial# serial_numfrom v$session s v$process p where s paddr=p addr and s type = USER order by s username s osuser )根据v sid查看对应连接的资源占用等情况select n name v value n class n statistic#from v$statname n v$sesstat vwhere v sid = andv statistic# = n statistic#order by n class n statistic# )根据sid查看对应连接正在运行的sqlselect /*+ PUSH_SUBQ */mand_type sql_text sharable_mem persistent_mem runtime_mem sorts version_count loaded_versions open_versions users_opening executions users_executing loads first_load_time invalidations parse_calls disk_reads buffer_gets rows_processed sysdate start_time sysdate finish_time > || address sql_address N statusfrom v$sqlareawhere address = (select sql_address from v$session where sid = ) 查询表空间使用情况select a tablespace_name 表空间名称 round((nvl(b bytes_free )/a bytes_alloc)* ) 占用率(%) round(a bytes_alloc/ / ) 容量(M) round(nvl(b bytes_free )/ / ) 空闲(M) round((a bytes_alloc nvl(b bytes_free ))/ / ) 使用(M) Largest 最大扩展段(M) to_char(sysdate yyyy mm dd hh :mi:ss ) 采样时间 from (select f tablespace_name sum(f bytes) bytes_alloc sum(decode(f autoextensible YES f maxbytes NO f bytes)) maxbytesfrom dba_data_files fgroup by tablespace_name) a (select f tablespace_name sum(f bytes) bytes_freefrom dba_free_space fgroup by tablespace_name) b (select round(max(ff length)* / ) Largest ts name tablespace_namefrom sys fet$ ff sys file$ tf sys ts$ tswhere ts ts#=ff ts# and ff file#=tf relfile# and ts ts#=tf ts#group by ts name tf blocks) cwhere a tablespace_name = b tablespace_name and a tablespace_name = c tablespace_name 查询表空间的碎片程度 select tablespace_name count(tablespace_name) from dba_free_space group by tablespace_namehaving count(tablespace_name)> ;alter tablespace name coalesce;alter table name deallocate unused;create or replace view ts_blocks_v asselect tablespace_name block_id bytes blocks free space segment_name from dba_free_spaceunion allselect tablespace_name block_id bytes blocks s lishixin/Article/program/Oracle/201311/18531

D. 数据库手册:速查Oracle函数列表

PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序 在SQL中Oracle内建了一系列函数 这些函数都可被称为SQL或PL/SQL语句 函数主要分为两大类: 单行函数; 组函数本文将讨论如何利用单行函数以及使用规则 SQL中的单行函数SQL和PL/SQL中自带很多类型的函数 有字符 数字 日期 转换 和混合型等多种函数用于处理单行数据 因此这些都可被统称为单行函数 这些函数均可用于SELECT WHERE ORDER BY等子句中 例如下面的例子中就包含了TO_CHAR UPPER SOUNDEX等单行函数 SELECT ename TO_CHAR(hiredate day DD Mon YYYY )FROM empWhere UPPER(ename) Like AL% ORDER BY SOUNDEX(ename)单行函数也可以在其他语句中使用 如update的SET子句 INSERT的VALUES子句 DELET的WHERE子句 认证考试特别注意在SELECT语句中使用这些函数 所以我们的注意力也集中在SELECT语句中 NULL和单行函数 在如何理解NULL上开始是很困难的 就算是一个很有经验的人依然对此感到困惑 NULL值表示一个未知数据或者一个空值 算术操作符的任何一个操作数为NULL值 结果均为提个NULL值 这个规则也适合很多函数 只有CONCAT DECODE DUMP NVL REPLACE在调用了NULL参数时能够返回非NULL值 在这些中NVL函数时最重要的 因为他能直接处理NULL值 NVL有两个参数:NVL(x x ) x 和x 都式表达式 当x 为null时返回X 否则返回x 下面我们看看emp数据表它包含了薪水 奖金两项 需要计算总的补偿column name emp_id salary bonuskey type pk nulls/unique nn u nnfk table datatype number number numberlength 不是简单的将薪水和奖金加起来就可以了 如果某一行是null值那么结果就将是null 比如下面的例子:update empset salary=(salary+bonus)* 这个语句中 雇员的工资和奖金都将更新为一个新的值 但是如果没有奖金 即 salary + null 那么就会得出错误的结论 这个时候就要使用nvl函数来排除null值的影响 所以正确的语句是:update empset salary=(salary+nvl(bonus )* 单行字符串函数 单行字符串函数用于操作字符串数据 他们大多数有一个或多个参数 其中绝大多数返回字符串ASCII()c 是一字符串 返回c 第一个字母的ASCII码 他的逆函数是CHR()SELECT ASCII( A ) BIG_A ASCII( z ) BIG_z FROM empBIG_A BIG_z CHR()[NCHAR_CS]i是一个数字 函数返回十进制表示的字符select CHR( ) CHR( ) CHR( ) FROM empCHR CHR CHR A z BCONCAT( )c c 均为字符串 函数将c 连接到c 的后面 如果c 为null 将返回c 如果c 为null 则返回c 如果c c 都为null 则返回null 他和操作符||返回的结果相同select concat( slobo Svoboda ) username from alusernameslobo SyobodaINITCAP()c 为一字符串 函数将每个单词的第一个字母大写其它字母小写返回 单词由空格 控制字符 标点符号限制 select INITCAP( veni vedi vici ) Ceasar from alCeasarVeni Vedi ViciINSTR( [ [ ]])c c 均为字符串 i j为整数 函数返回c 在c 中第j次出现的位置 搜索从c 的第i个字符开始 当没有发现需要的字符时返回 如果i为负数 那么搜索将从右到左进行 但是位置的计算还是从左到右 i和j的缺省值为 select INSTR( Mississippi i ) from alINSTR( MISSISSIPPI I ) select INSTR( Mississippi i ) from alINSTR( MISSISSIPPI I ) INSTRB( [ i[ j])与INSTR()函数一样 只是他返回的是字节 对于单字节INSTRB()等于INSTR()LENGTH()c 为字符串 返回c 的长度 如果c 为null 那么将返回null值 select LENGTH( Ipso Facto ) ergo from alergo LENGTHb()与LENGTH()一样 返回字节 lower()返回c的小写字符 经常出现在where子串中select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE %white% COLORNAMEWinterwhiteLPAD( [ ])c c 均为字符串 i为整数 在c 的左侧用c 字符串补足致长度i 可多次重复 如果i小于c 的长度 那么只返回i那么长的c 字符 其他的将被截去 c 的缺省值为单空格 参见RPAD select LPAD(answer ) padded answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybeLTRIM( )把c 中最左边的字符去掉 使其第一个字符不在c 中 如果没有c 那么c 就不会改变 select LTRIM( Mississippi Mis ) from alLTRppiRPAD( [ ])在c 的右侧用c 字符串补足致长度i 可多次重复 如果i小于c 的长度 那么只返回i那么长的c 字符 其他的将被截去 c 的缺省值为单空格 其他与LPAD相似RTRIM( )把c 中最右边的字符去掉 使其第后一个字符不在c 中 如果没有c 那么c 就不会改变 REPLACE( [ ])c c c 都是字符串 函数用c 代替出现在c 中的c 后返回 select REPLACE( uptown up down ) from alREPLACEdowntownSTBSTR( [ ])c 为一字符串 i j为整数 从c 的第i位开始返回长度为j的子字符串 如果j为空 则直到串的尾部 select SUBSTR( Message ) from alSUBSMessSUBSTRB( [ ])与SUBSTR大致相同 只是I J是以字节计算 SOUNDEX()返回与c 发音相似的词select SOUNDEX( dawes ) Dawes SOUNDEX( daws ) Daws SOUNDEX( dawson ) from alDawes Daws DawsonD D D TRANSLATE( )将c 中与c 相同的字符以c 代替select TRANSLATE( fumble uf ar ) test from alTEXTrambleTRIM([[]] from c )将c 串中的第一个 最后一个 或者都删除 select TRIM( space padded ) trim from al TRIMspace paddedUPPER()返回c 的大写 常出现where子串中select name from al where UPPER(name) LIKE KI% NAMEKING 单行数字函数 单行数字函数操作数字数据 执行数学和算术运算 所有函数都有数字参数并返回数字值 所有三角函数的操作数和值都是弧度而不是角度 oracle没有提供内建的弧度和角度的转换函数 ABS()返回n的绝对值ACOS()反余玄函数 返回 到 之间的数 n表示弧度select ACOS( ) pi ACOS( ) ZERO FROM alPI ZERO ASIN()反正玄函数 返回 到 n表示弧度ATAN()反正切函数 返回n的反正切值 n表示弧度 CEIL()返回大于或等于n的最小整数 COS()返回n的余玄值 n为弧度COSH()返回n的双曲余玄值 n 为数字 select COSH(< >) FROM alCOSH( ) EXP()返回e的n次幂 e= FLOOR()返回小于等于N的最大整数 LN()返回N的自然对数 N必须大于 LOG( )返回以n 为底n 的对数MOD()返回n 除以n 的余数 POWER( )返回n 的n 次方ROUND( )返回舍入小数点右边n 位的n 的值 n 的缺省值为 这回将小数点最接近的整数 如果n 为负数就舍入到小数点左边相应的位上 n 必须是整数 select ROUND( ) ROUND( ) FROM alROUND( ) ROUND( ) SIGN()如果n为负数 返回 如果n为正数 返回 如果n= 返回 SIN()返回n的正玄值 n为弧度 SINH()返回n的双曲正玄值 n为弧度 SQRT()返回n的平方根 n为弧度TAN()返回n的正切值 n为弧度TANH()返回n的双曲正切值 n为弧度TRUNC( )返回截尾到n 位小数的n 的值 n 缺省设置为 当n 为缺省设置时会将n 截尾为整数 如果n 为负值 就截尾在小数点左边相应的位上 单行日期函数 单行日期函数操作DATA数据类型 绝大多数都有DATA数据类型的参数 绝大多数返回的也是DATA数据类型的值 ADD_MONTHS( )返回日期d加上i个月后的结果 i可以使任意 lishixin/Article/program/Oracle/201311/17021

E. Oracle中SQL*PLUS使用的一些技巧

Sql*plus中蕴藏着好多技巧 如果掌握这些技巧 对于在oracle数据库下进行快速开发与有效维护数据库都是有益的 .使用SQL*PLUS动态生成批量脚本将spool与select命令结合起来使用 可以生成一个脚本 脚本中包含有可以批量执行某一任务的语句 例 生成一个脚本 删除SCOTT用户下的所有的表 a 创建gen_drop_table sql文件 包含如下语句 SPOOLc:drop_table sqlSELECT DROP TABLE || table_name || ; FROM user_tables;SPOOL OFFb 以SCOTT用户登录数据库SQLPLUS > @ … gen_dorp_table sqlc 在c盘根目录下会生成文件drop_table sql文件 包含删除所有表的语句 如下所示:SQL>SELECT DROP TABLE || table_name || ; FROM user_tables; DROPTABLE ||TABLE_NAME|| ; DROP TABLE DEPT;DROP TABLE EMP;DROP TABLE PARENT;DROP TABLE STAT_VENDER_TEMP;DROP TABLE TABLE_FORUM; rows selected SQL>SPOOL OFFd 对生成的drop_table sql文件进行编辑去掉不必要的部分 只留下drop table … 语句e 在scott用户下运行dorp_table sql文件 删除scott用户下所有的表 SQLPLUS > @ c:dorp_table sql在上面的操作中 在生成的脚本文件中会有多余的字符 如运行的sql语句 标题 或返回的行数 需要我们编辑该脚本后再运行 给实际的操作带来诸多不便 懒惰是人的本性 这促使我们用更简单的办法来实现上面的任务 a 创建gen_drop_table sql文件 包含如下语句 set echo offset feedback offset newpage noneset pagesize set linesize set verify offset pagesize set term offset trims onset linesize set headingoffset timing offset verify offset numwidth SPOOLc:drop_table sqlSELECT DROP TABLE || table_name || ; FROM user_tables;SPOOL OFFb 以SCOTT用户登录数据库SQLPLUS > @ … gen_dorp_table sqlc 在c盘根目录下会生成文件drop_table sql文件 包含删除所有表的语句 如下所示:DROP TABLE DEPT;DROP TABLE EMP;DROP TABLE PARENT;DROP TABLE STAT_VENDER_TEMP;DROP TABLE TABLE_FORUM;d 在scott用户下运行dorp_table sql文件 删除scott用户下所有的表 SQLPLUS > @ c:dorp_table sql .将一个表中的数据导出生成一个文本文件 列与列之间以 隔开set echo offset feedback offset newpage noneset pagesize set linesize set verify offset pagesize set term offset trims onset linesize set headingoffset timing offset verify offset numwidth SPOOLc:drop_table sqlselect DEPTNO || || DNAME FROM DEPT;SPOOL OFF将上面的内容保存为一个文本文件后 以scott登录 执行该文件后显示结果 ACCOUNTING RESEARCH SALES OPERATIONS通过上面的两个例子 我们可以将 set echo offset feedback offset newpage noneset pagesize set linesize set verify offset pagesize set term offset trims onset linesize set headingoffset timing offset verify offset numwidth SPOOLc:具体的文件名你要运行的sql语句SPOOL OFF作为一个模版 只要将必要的语句假如这个模版就可以了 在oracle的较新版本中 还可以用set colsep命令来实现上面的功能 SQL> set colsep SQL> select * from dept; ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO OPERATIONS BOSTON aa bb .动态生成spool命令所需的文件名在我们上面的例子中 spool命令所需要的文件名都是固定的 有时我们需要每天spool一次 并且每次spool的文件名都不相同 如文件名包含当天的日期 该如何实现呢?column dat new_value filename;select to_char(sysdate yyyymmddhh mi ) dat from al;spool c:&&filename txtselect * from dept;spool off; .如何从脚本文件中得到WINDOWS环境变量的值 在windos中 spool c: emp\%ORACLE_SID% txtselect * from dept; spool off在上面的例子中 通过%ORACLE_SID%的方式引用环境变量ORACLE_SID的值 如果ORACLE_SID的值为orcl 则生成的spool文件名为 orcl txt在UNIX中 spool c: emp$ORACLE_SID txtselect * from dept; spool off在上面的例子中 通过$ORACLE_SID的方式引用环境变量ORACLE_SID的值 如果ORACLE_SID的值为orcl 则生成的spool文件名为 orcl txt .如何指定缺省的编辑脚本的目录在sql*plus中 可以用save命令 将上一条执行的sql语句保存到一个文件中 但是如何设置该文件的缺省目录呢?通过SQL> set editfile c: empfile sql 命令 可以设置其缺省目录为c: mpe 缺省文件名为file sql .如何除去表中相同的行找到相同的行 SELECT * FROM dept aWHERE ROWID <> (SELECT MAX(ROWID)FROM dept bWHERE a deptno = b deptnoAND a dname = b dname Make sure all columns are paredAND a loc = b loc);注释 如果只找deptno列相同的行 上面的查询可以改为 SELECT * FROM dept aWHERE ROWID <> (SELECT MAX(ROWID)FROM dept bWHERE a deptno = b deptno)删除相同的行 DELETE FROM dept aWHERE ROWID <> (SELECT MAX(ROWIDFROM dept bWHERE a deptno = b deptnoAND a dname = b dname Make sure all columns are paredAND a loc = b loc);注意 上面并不删除列值为null的行 .如何向数据库中插入两个单引号( )Insert inot dept values( aa bb a b );在插入时 用两个 表示一个 .如何设置sql*plus的搜寻路径 这样在用@命令时 就不用输入文件的全路径 设置SQLPATH环境变量 如 SQLPATH = C:ORANTDBS;C:APPSSCRIPTS;C:MYSCRIPTS .@与@@的区别是什么?@等于start命令 用来运行一个sql脚本文件 @命令调用当前目录下的 或指定全路径 或可以通过SQLPATH环境变量搜寻到的脚本文件 @@用在脚本文件中 用来指定用@@执行的文件与@@所在的文件在同一目录 而不用指定全路径 也不从SQLPATH环境变量指定的路径中寻找文件 该命令一般用在嵌套脚本文件中 .&与&&的区别&用来创建一个临时变量 每当遇到这个临时变量时 都会提示你输入一个值 &&用来创建一个持久变量 就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样 当用&&命令引用这个变量时 不会每次遇到该变量就提示用户键入值 而只是在第一次遇到时提示一次 如 将下面三行语句存为一个脚本文件 运行该脚本文件 会提示三次 让输入deptnoval的值 select count(*) from emp where deptno = &deptnoval;select count(*) from emp where deptno = &deptnoval;select count(*) from emp where deptno = &deptnoval;将下面三行语句存为一个脚本文件 运行该脚本文件 则只会提示一次 让输入deptnoval的值 select count(*) from emp where deptno = &deptnoval;select count(*) from emp where deptno = &deptnoval;select count(*) from emp where deptno = &deptnoval; .引入的目的Copy命令在两个数据库之间拷贝数据时特别有用 特别是该命令可以在两个数据库之间传递long型字段的数据 缺点 在两个数据库之间传递数据时 有可能丢失精度(lose precision) .问什么在修改大量的行时 我的脚本会变得很慢?当通过PL/SQL块修改一个表中的许多行时 你会创建在表上创建一个cursor 但是只有在你关闭cursor时 才会释放ROLLBACK SEGMENT 这样 当cursor仍然打开时 修改过程会变慢 这是因为数据库不得不搜寻大量的rollback segment以便于维护读一致性 为了避免这样情况 试着在表上加一个标志字段来描述该行是否已经被修改 然后关闭该cursor 然后再打开该cursor 每次可以修改 行 lishixin/Article/program/Oracle/201311/17262

F. sql server 2005和oracle的 中文参考手册

sqlserver 2005自带的帮助文档就已经很全面了。

oracle10g的官方文档
http://www.oracle.com/pls/db102/portal.portal_db?selected=9

G. oracle中怎样执行.sql文件

建议使用plsql工具来连接Oracle数据库进行表操作,这样很方便的,就像使用sqlserver一样方便

H. sql怎样跨数据库查询oracle

假定您现在拥有一个以Microsoft.NET为架构的网络订购系统,但是品管维护系统却仍然使用一套旧式的Oracle数据库应用程序。当您的顾客在产品保固期间下了产品更换之类的订单,则该笔订单将不收取任何费用。此时您需要从Oracle数据库得到实时的查询结果。借着建立连结服务器的方式(linkedServer),您将可以从SQLServer实时查询出位于Oracle数据库的顾客资料,找出谁是您既有的客户。
当您的资料分散在不同的SQLServer数据库时,借由连结服务器可让您执行跨服务器之分布式查询。当所有的数据库服务器都是SQLServer,则连结服务器的设定十分容易,而且在SQLServer线上手册中就涵盖了您所需要了解的所有事项。然而,当部分资料是放在Oracle数据库服务器的时候,这就可能带给您许多挑战。举例来说,光是设定连结服务器就不是一件容易的事。您必须了解到:即是您要在SQLServer的EnterpriseManager设定一个Oracle连结服务器,这台SQLServer对Oracle来说就是一个客户端。所以您必须在SQLServer所在的服务器成功地安装并组态Oracle之客户端软件。因为Oracle提供的产品只支持Oracle8以后的数据库,所以我假设您正在使用的都是Oracle8以后的数据库。在OracleNet8函式库则提供了SQLServer所需要的客户端软件。
设定连接服务器时是利用Microsoft所提供的OLEDB ProviderforOracle,使用的Oracle网络函式库为SQL*Net2.3.3.0.4或是以后的版本,不过这是Oracle7.3数据库所提供的。换句话说,要设定Oracle数据库为SQLServer的连接服务器时,Oracle数据库只要是7.3.3.4以后的版本,并搭配适当的SQL*Net或是Net8函式库即可。
在Oracle数据库中,一个schema即代表着SQLServer专家们所熟知的单一数据库(译者注2)。连接至Oracle数据库时,您必须提供schema名称、密码以及主机联机字符串(hoststring)。每一个特定的Oracle帐户都拥有一个Oracleschema,而且只能有一个schema。所以schema名称其实就等于该schema拥有者的帐户名称。您可以查询Oracle的资料字典(Datadictionary)以得到更多有关schema的内容。
至于Oracle联机字符串又可称为服务名称(servicename)或是系统识别资料(SystenIdentifier,SID)。我们所谓的SQLServer数据库个体(instance)在Oracle则称为数据库(database)。所以安装OracleServer时,安装程序OracleUniversalInstaller(为一个图形接口之安装程序,与SQLServer的Setup程序类似)将会询问您SID名称为何,以作为Oracle数据库之名称。
这个部分原作者所提到schema的解释有点问题。Oracleschema可视为同一个使用者所拥有的所有数据库对象(schemaobjects)之集合。举例来说,使用者scott所建立的EMPtable其完整名称为SCOTT.EMP,而SCOTT就是EMP的schema名称。所以schemaname其实就是一个Oracle数据库之使用者帐号。但是绝对不能拿来跟数据库相提并论!因为SQLServer的数据库架构包含了datafiles与logfiles,但是Oracle的schemaobjects只存在于tablespace中。为了避免部分读者产生混淆,特此说明。

热点内容
如何更改笔记本电脑密码方式 发布:2025-07-02 11:34:07 浏览:50
安卓平板不知道怎么选 发布:2025-07-02 11:33:22 浏览:14
qq空间怎么设密码 发布:2025-07-02 11:30:29 浏览:717
跑跑卡丁车如何更改服务器 发布:2025-07-02 11:27:35 浏览:298
我的世界112服务器存档 发布:2025-07-02 11:25:02 浏览:946
php类函数调用 发布:2025-07-02 11:24:27 浏览:25
redhat存储 发布:2025-07-02 11:12:50 浏览:585
优酷不能用流量缓存 发布:2025-07-02 11:10:46 浏览:941
彩虹岛小草怎么设置脚本 发布:2025-07-02 11:10:33 浏览:922
越压缩越封闭 发布:2025-07-02 11:09:10 浏览:90