仓酷云

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

[学习教程] MYSQL网站制作之在Oracle运转操纵体系命令

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:39:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
珍贵的资金可以用于其他业务的启动,诸如市场、广告或调研和开发等。oracle在Oracle8i中,常常会呈现要在存储过程当中运转操纵体系命令的情形.一样平常来讲,使用OracleEnterpriseManager设定功课时能够到达这个目标.可是因为OEM在设定功课缺少天真性,设定的功课的参数是流动的.在实践使用傍边常常必要在SQL语句傍边运转必要随时运转操纵体系命令.Oracle8i没有间接运转OS命令的语句,我们能够使用DBMS_PIPE程序包完成这一请求.DBMS_PIPE经由过程创立管道,可让最少两个历程举行通讯.Oracle的管道与操纵体系的管道在观点上有不异的中央,可是在完成机制分歧.上面先容完成详细步骤:1创立一个程序包,临时起名叫DAEMON,SQL语句以下:/*创立daemon程序包*/CREATEORREPLACEPACKAGEBODYdaemonAS/*execute_system是完成运转os命令的函数*/FUNCTIONexecute_system(commandVARCHAR2,timeoutNUMBERDEFAULT10)RETURNNUMBERISstatusNUMBER;resultVARCHAR2(20);command_codeNUMBER;pipe_nameVARCHAR2(30);BEGINpipe_name:=DBMS_PIPE.UNIQUE_SESSION_NAME;DBMS_PIPE.PACK_MESSAGE(SYSTEM);DBMS_PIPE.PACK_MESSAGE(pipe_name);DBMS_PIPE.PACK_MESSAGE(command);/*向daemon管道发送暗示命令的字符*/status:=DBMS_PIPE.SEND_MESSAGE(daemon,timeout);IFstatus0THENRAISE_APPLICATION_ERROR(-20010,Execute_system:Errorwhilesending.Status=||status);ENDIF;status:=DBMS_PIPE.RECEIVE_MESSAGE(pipe_name,timeout);IFstatus0THENRAISE_APPLICATION_ERROR(-20011,Execute_system:Errorwhilereceiving.Status=||status);ENDIF;/*猎取前往了局*/DBMS_PIPE.UNPACK_MESSAGE(result);IFresultdoneTHENRAISE_APPLICATION_ERROR(-20012,Execute_system:Donenotreceived.);ENDIF;DBMS_PIPE.UNPACK_MESSAGE(command_code);DBMS_OUTPUT.PUT_LINE(Systemcommandexecuted.result=||command_code);RETURNcommand_code;ENDexecute_system;/*stop是让daemon中断*/PROCEDUREstop(timeoutNUMBERDEFAULT10)ISstatusNUMBER;BEGINDBMS_PIPE.PACK_MESSAGE(STOP);status:=DBMS_PIPE.SEND_MESSAGE(daemon,timeout);IFstatus0THENRAISE_APPLICATION_ERROR(-20030,stop:errorwhilesending.status=||status);ENDIF;ENDstop;ENDdaemon;经由过程Sql*Plus运转以上语句,将为以后用户创立daemon程序包.2创立在OS上运转的保卫历程,监听由下面的daemon程序包发来的请求实行os命令的语句.以下Pro*C的代码,必需由pro*c先辈行预编译.#include#includeEXECSQLINCLUDESQLCA;EXECSQLBEGINDECLARESECTION;char*uid="scott/tiger";/*在这个中央改成你本人会见的用户,暗码,服务名*/intstatus;VARCHARcommand[20];VARCHARvalue[2000];VARCHARreturn_name[30];EXECSQLENDDECLARESECTION;voidconnect_error(){charmsg_buffer[512];intmsg_length;intbuffer_size=512;EXECSQLWHENEVERSQLERRORCONTINUE;sqlglm(msg_buffer,&buffer_size,&msg_length);printf("Daemonerrorwhileconnecting:
");printf("%.*s
",msg_length,msg_buffer);printf("Daemonquitting.
");exit(1);}voidsql_error(){charmsg_buffer[512];intmsg_length;intbuffer_size=512;EXECSQLWHENEVERSQLERRORCONTINUE;sqlglm(msg_buffer,&buffer_size,&msg_length);printf("Daemonerrorwhileexecuting:
");printf("%.*s
",msg_length,msg_buffer);printf("Daemoncontinuing.
");}main(){EXECSQLWHENEVERSQLERRORDOconnect_error();EXECSQLCONNECT:uid;printf("Daemonconnected.
");EXECSQLWHENEVERSQLERRORDOsql_error();printf("Daemonwaiting...
");while(1){EXECSQLEXECUTEBEGIN/*吸收deamon发来的字符*/:status:=DBMS_PIPE.RECEIVE_MESSAGE(daemon);IF:status=0THEN/*掏出字符*/DBMS_PIPE.UNPACK_MESSAGE(:command);ENDIF;END;END-EXEC;IF(status==0){command.arr[command.len]=;/*假如是stop,该历程就加入*/IF(!strcmp((char*)command.arr,"STOP")){printf("Daemonexiting.
");break;}ELSEIF(!strcmp((char*)command.arr,"SYSTEM")){EXECSQLEXECUTEBEGINDBMS_PIPE.UNPACK_MESSAGE(:return_name);DBMS_PIPE.UNPACK_MESSAGE(:value);END;END-EXEC;value.arr[value.len]=;printf("Willexecutesystemcommand%s
",value.arr);/*运转os命令*/status=system(value.arr);EXECSQLEXECUTEBEGINDBMS_PIPE.PACK_MESSAGE(done);DBMS_PIPE.PACK_MESSAGE(:status);:status:=DBMS_PIPE.SEND_MESSAGE(:return_name);END;END-EXEC;IF(status){printf("Daemonerrorwhilerespondingtosystemcommand.");printf("status:%d
",status);}}ELSE{printf("Daemonerror:invalidcommand%sreceived.
",command.arr);}}ELSE{printf("Daemonerrorwhilewaitingforsignal.");printf("status=%d
",status);}}EXECSQLCOMMITWORKRELEASE;exit(0);}以上代码起名为daemon.pc,用proc预编译:prociname=daemon.pcuserid=用户名/暗码@服务名sqlcheck=semantics失掉daemon.c,在用c举行编译,注重在NT上要把orasql8.lib加上,不然编译经由过程,毗连没法经由过程.3在服务器上运转daemon.exe

4在sqlplus运转测试语句:SQL>variablervnumberSQL>execute:rv:=DAEMON.EXECUTE_SYSTEM(ls-la);PL/SQL历程已乐成完成。SQL>execute:rv:=DAEMON.EXECUTE_SYSTEM(dir);PL/SQL历程已乐成完成。SQL>DBMS_PIPE的用法见oracle的文档.一些典型的RDBMS功能并不总是在DBaaS系统中可用。例如MySQL学习教程,WindowsAzureSQLDatabase(以前的SQLAzure)是微软的DBaaS产品,提供了一个类似于SQLServer的数据库平台。
柔情似水 该用户已被删除
沙发
发表于 2015-1-19 20:31:36 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
深爱那片海 该用户已被删除
板凳
发表于 2015-1-28 10:22:08 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
不帅 该用户已被删除
地板
发表于 2015-2-5 15:06:00 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
若相依 该用户已被删除
5#
发表于 2015-2-12 10:11:01 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
小女巫 该用户已被删除
6#
发表于 2015-3-3 02:48:23 | 只看该作者
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
简单生活 该用户已被删除
7#
发表于 2015-3-11 09:03:35 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
精灵巫婆 该用户已被删除
8#
发表于 2015-3-18 01:39:38 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
小魔女 该用户已被删除
9#
发表于 2015-3-25 09:36:05 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 20:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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