仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 653|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网站制作之Oracle数据库数据工具剖析 (下)

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:40:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
下面我将描述五个不使用MySQL的响亮理由。oracle|工具|数据|数据库 历程和函数

  历程和函数都以编译后的情势寄存在数据库中,函数能够没有参数也能够有多个参数并有一个前往值。历程有零个或多个参数,没有前往值。函数和历程都能够经由过程参数列表吸收或前往零个或多个值,函数和历程的次要区分不在于前往值,而在于他们的挪用体例。历程是作为一个自力实行语句挪用的:

pay_involume(invoice_nbr,30,due_date);

  函数以正当的表达式的体例挪用:

order_volumn:=open_orders(SYSDATE,30);

  创立历程的语法以下:

CREATE[ORREPLACE]PROCEDURE[schema.]procedure_name
[parameter_lister]
{AS|IS}
declaration_section
BEGIN
executable_section
[EXCEPTION
exception_section]
END[procedure_name]
  每一个参数的语法以下:

paramter_namemodedatatype[(:=|DEFAULT)value]

  mode有三种情势:IN、OUT、INOUT。

  IN暗示在挪用历程的时分,实践参数的取值被传送给该历程,情势参数被以为是只读的,当历程停止时,把持会前往把持情况,实践参数的值不会改动。

  OUT在挪用历程时实践参数的取值都将被疏忽,在历程外部情势参数只能是被赋值,而不克不及从中读取数据,在历程停止后情势参数的内容将被付与实践参数。

  INOUT这类形式是IN和OUT的组合;在历程外部实践参数的值会传送给情势参数,情势参数的值可读也可写,历程停止后,情势参数的值将付与实践参数。

  创立函数的语法和历程的语法基础不异,独一的区分在于函数有RETUREN子句

CREATE[ORREPLACE]FINCTION[schema.]function_name
[parameter_list]
RETURNreturning_datatype
{AS|IS}
declaration_section
BEGIN
executable_section
[EXCEPTION]
exception_section
END[procedure_name]
  在实行部分函数必需有哟个或多个return语句。

  在创立函数中能够挪用单行函数和组函数,比方:

CREATEORREPLACEFUNCTIONmy_sin(DegreesInINNUMBER)
RETURNNUMBER
IS
piNUMBER=ACOS(-1);
RadiansPerDegreeNUMBER;

BEGIN
RadiansPerDegree=pi/180;
RETURN(SIN(DegreesIn*RadiansPerDegree));
END包

  包是一种将历程、函数和数据布局绑缚在一同的容器;包由两个部分构成:内部可视包标准,包含函数头,历程头,和内部可视数据布局;另外一部分是包主体(packagebody),包主体包括了一切被绑缚的历程和函数的声明、实行、非常处置部分。

  打包的PL/SQL程序和没有打包的有很年夜的差别,包数据在用户的全部会话时代都一向存在,当用户取得包的实行受权时,就即是取得包标准中的一切程序和数据布局的权限。但不克不及只对包中的某一个函数或历程举行受权。包能够重载历程和函数,在包内能够用统一个名字声明多个程序,在运转时依据参数的数量和数据范例挪用准确的程序。

  创立包必需起首创立包标准,创立包标准的语法以下:

CREATE[ORREPLACE]PACKAGEpackage_name
{AS|IS}
public_variable_declarations|
public_type_declarations|
public_exception_declarations|
public_cursor_declarations|
function_declarations|
procedure_specifications
END[package_name]
  创立包主体利用CREATEPACKAGEBODY语句:

CREATE[ORREPLACE]PACKAGEBODYpackage_name
{AS|IS}
private_variable_declarations|
private_type_declarations|
private_exception_declarations|
private_cursor_declarations|
function_declarations|
procedure_specifications
END[package_name]
  公有数据布局是那些在包主体外部,对被挪用程序而言是不成见的。

  触发器(Triggers)

  触发器是一种主动实行呼应数据库变更的程序。能够设置为在触发器事务之前或以后触发或实行。可以触发触发器事务的事务包含上面几种:

  DML事务
  DDL事务
  数据库事务

  DML事务触发器能够是语句或行级触发器。DML语句触发器在触发语句之前或以后触发DML行级触发器在语句影响的行变更之前或以后触发。用户能够给单一事务和范例界说多个触发器,但没有任何办法能够加强多触发器触发的命令。下表列出了用户能够使用的触发器事务:

事务触发器形貌INSERT当向表或视图拔出一行时触发触发器UPDATE更新表或视图中的某一行时触发触发器DELETE从表或视图中删除某一行时触发触发器CREATE当利用CREATE语句为数据库或项目增添一个工具时触发触发器ALTER当利用ALTER语句为变动一个数据库或项目标工具时触发触发器DROP当利用DROP语句删除一个数据库或项目标工具时触发触发器START翻开数据库时触发触发器,在事务后触发SHUTDOWN封闭数据库时触发,事务前触发LOGON当一个会话创建时触发,事务前触发LOGOFF当封闭会话时触发,事务前触发SERVER服务器毛病产生时触发触发器,事务后触发
  创立触发器的语法以下:

CREATE[ORREPLACE]TRIGGERtrigger_name
{before|after|insteadof}event
ON{table_or_view_name|DATABASE}
[FOREACHROW[WHENcondition]]
trigger_body
  只要DML触发器(INSERT、UPDATE、DELETE)语句可使用INSTEADOF触发器而且只要表的DML触发器能够是BEFORE或AFTER触发器。

  象束缚一样触发器能够被设置为禁用或启用来封闭或翻开他们的实行体(EXECUTE),将触发器设置为禁用或启用利用ALTERTRIGGER语句:

ALTERTRIGGERtrigger_nameENABLE;
ALTERTRIGGERtrigger_nameDISABLE;
  要禁用或启用表的一切触发器,利用ALTERTABLE语句

ALTERTRIGGERtable_nameDISABLEALLTRIGGER;
ALTERTRIGGERtable_nameENABLEALLTRIGGER;
  删除触发器利用DROPTRIGGER

DROPTRIGGERtrigger_name;
  数据字典

  Oracle数据字典包括了用户数据库的元数据。带下划线的表称号中带OBJ$、UET$、SOURCE$,这些表是在实行CREATEDATABASE语句时代由sql.bsq剧本创立的,一样平常情形下用户很少会见这些表。剧本catalog.sql(一般位于$oracle_home/rdbms/admin)在CREATEDATABASE语句以后当即运转,创立数据字典视图。

  数据字典视图大抵能够分为三类:

  .前缀为USER_的数据字典视图,包括了用户具有的工具的信息。

  .前缀为ALL_的数据字典视图,包括了用户以后能够会见的全体工具和权限的信息。

  .前缀为DBA_的数据字典视图,包括了数据库具有的一切工具和权限的信息。

  在尽年夜多半数据字典视图中都有象DBA_TABLES,ALL_TABLES和USER_TABLES如许的视图家属。Oracle中有凌驾100个视图家属,以是要周全先容这些视图家属是单调有趣的并且没有多年夜的意义。鄙人表中列出了最主要和最经常使用的视图家属,必要注重的是每一个视图家属都有一个DBA_,一个ALL_一个USER_视图。

视图家属(ViewFamily)形貌COL_PRIVS包括了表的列权限,包含授与者、被授与者和权限EXTENTS数据局限信息,好比数据文件,数据段名(segment_name)和巨细INDEXES索引信息,好比范例、独一性和被触及的表IND_COLUMNS索引列信息,好比索引上的列的排序体例OBJECTS工具信息,好比形态和DDLtimeROLE_PRIVS脚色权限,好比GRANT和ADMIN选项SEGMENTS表和索引的数据段信息,好比tablespace和storageSEQUECNCES序列信息,好比序列的cache、cycle和ast_numberSOURCE除触发器以外的一切内置历程、函数、包的源代码SYNONYMS别号信息,好比援用的工具和数据库链接db_linkSYS_PRIVS体系权限,好比grantee、privilege、admin选项TAB_COLUMNS表和视图的列信息,包含列的数据范例TAB_PRIVS表权限,好比授与者、被授与者和权限TABLES表信息,好比表空间(tablespace),存储参数(storageparms)和数据行的数目TRIGGERS触发器信息,好比范例、事务、触发体(triggerbody)USERS用户信息,好比一时的和缺省的表空间VIEWS视图信息,包含视图界说
  在Oracle中另有一些不经常使用的数据字典表,但这些表不是真实的字典家属,他们都是一些主要的单一的视图。

VIEWNAME形貌USER_COL_PRIVS_MADE用户授与别人的列权限USER_COL_PRIVS_RECD用户取得的列权限USER_TAB_PRIVS_MADE用户授与别人的表权限USER_TAB_PRIVS_RECD用户取得的表权限
  其他的字典视图中次要的是V$视图,之以是如许叫是由于他们都是以V$或GV$开首的。V$视图是基于X$假造视图的。V$视图是SYS用户所具有的,在缺省情况下,只要SYS用户和具有DBA体系权限的用户能够看到一切的视图,没有DBA权限的用户能够看到USER_和ALL_视图,但不克不及看到DBA_视图。与DBA_,ALL,和USER_视图中面向数据库信息相反,这些视图可视的给出了面向实例的信息。

   在年夜型体系上化几周工夫手工输出每条语句

   手工输出带用户名变量的语句,然后再输出每个用户名,这必要花好几个小时的工夫

   写一条SQL语句,天生必要的ALTERUSER语句,然后实行他,这只必要几分钟工夫

  很分明我们将选择天生SQL的办法:

  例:

SELECTALTERUSER||username||
TEMPORARYTABLESPACEtemp;
FROMDBA_USERS
WHEREusernameSYS
ANDtemporary_tablespace
  这个查询的了局将被脱机处置到一个文件中,然后在实行:

ALTERUSERSYSTEMTEMPORARYTABLESPACEtemp;
ALTERUSEROUTLNTEMPORARYTABLESPACEtemp;
ALTERUSERDBSNMPTEMPORARYTABLESPACEtemp;
ALTERUSERSCOTTTEMPORARYTABLESPACEtemp;
ALTERUSERDEMOTEMPORARYTABLESPACEtemp;这些过程被存储和运行在数据库服务器上,以减少在客户端的处理过程,从而最大限度地提高了处理能力,因为通常情况下数据库服务器会运行地更快。存储过程并不是MySQL独有的功能,但是这个最近新增加的功能使得这个数据库比以前更具吸引力了。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-19 21:08:25 | 只看该作者
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-25 12:17:02 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
admin 该用户已被删除
地板
发表于 2015-2-2 22:03:50 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
小魔女 该用户已被删除
5#
发表于 2015-2-8 09:43:48 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
第二个灵魂 该用户已被删除
6#
发表于 2015-2-25 08:59:51 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
若天明 该用户已被删除
7#
发表于 2015-3-7 18:39:45 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
小女巫 该用户已被删除
8#
发表于 2015-3-15 11:41:46 | 只看该作者
呵呵,这就是偶想说的
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-22 00:37:09 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 18:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表