游客re3g4f5i4jag6_个人页

个人头像照片 游客re3g4f5i4jag6
0
1
0

个人介绍

暂无个人介绍

擅长的技术

获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
暂无更多信息
正在加载, 请稍后...
暂无更多信息
  • 回答了问题 2018-07-26

    go sdk 分片大小设置范围

    详细解答可以参考官方帮助文档当下载大文件时,如果网络不稳定或者程序崩溃了,则整个下载就失败了。用户 不得不重头再来,这样做不仅浪费资源,在网络不稳定的情况下,往往重试多次 还是无法完成下载。 通过Bucket.DownloadFile接口来实现断点续传下载。它有以下参数: objectKey 要下载的Object名字 filePath 下载到本地文件的路径 partSize 下载分片大小,从1B到5GB,单位是Byte options 可选项,主要包括: Routines 指定分片下载的并发数,默认是1,及不使用并发下载 Checkpoint 指定下载是否开启断点续传,及checkpoint文件的路径。默认断点续传功能关闭,checkpoint文件的路径可以指定为空,如果不指定则默认为与本地文件同 目录下的file.cpt,其中file是本地文件的名字 下载时限定条件,请参看指定限定条件下载 其实现的原理是将要下载的Object分成若干个分片分别下载,最后所有分片都下 载成功后,完成整个文件的下载。在下载的过程中会记录当前下载的进度信息 (记录在checkpoint文件中)和已下载的分片,如果下载过程中某一分片下载失败,再次下 载时会从checkpoint文件中记录的点继续下载。这要求再次调用时要指定与上次 相同的checkpoint文件。下载完成后,checkpoint文件会被删除。 import 'github.com/aliyun/aliyun-oss-go-sdk/oss' client, err := oss.New('Endpoint', 'AccessKeyId', 'AccessKeySecret') if err != nil { // HandleError(err) } bucket, err := client.Bucket('my-bucket') if err != nil { // HandleError(err) } err = bucket.DownloadFile('my-object', 'LocalFile', 100*1024, oss.Routines(3), oss.Checkpoint(true, '')) if err != nil { // HandleError(err) } 注意: SDK会将下载的中间状态信息记录在cp文件中,所以要确保用户对cpt文 件有写权限 cpt文件记录了下载的中间状态信息并自带了校验,用户不能去编辑它,如 果cpt文件损坏则重新下载文件 如果下载过程中待下载的Object发生了改变(ETag改变),或者part文件丢 失或被修改,则重新下载文件 提示: 指定断点续传checkpoint文件路径使用oss.Checkpoint(true, 'your-cp-file.cp') 使用bucket.DownloadFile(objectKey, localFile, 100*1024),默认不使用分片并发下载、不启动断点续传
    踩1 评论0
  • 提交了问题 2018-07-19

    2. 重置实例密码,未重启实例 [出现概率:7%]

  • 提交了问题 2018-05-22

    对象存储 OSS设置Referer白名单

  • 回答了问题 2018-05-15

    为什么黑洞时间拉长了

    详细解答可以参考官方帮助文档一、什么是安全信誉防护联盟为了给您带来更好的安全防护体验,并且提升安全防护能力,阿里云开展安全信誉防护联盟计划。加入该计划后,依据安全信誉评估结果,可获得阿里云提供的动态的DDoS攻击防御能力。 目前,安全信誉防护联盟计划全量开放,加入联盟计划您不需要支付任何费用。 二、安全信誉联盟的优势 提升攻击防御阈值。根据安全信誉动态调整防护阈值,绝大部分用户的防护阈值不小于机房默认黑洞触发阈值,使您的业务被攻击打进黑洞的几率降低。开放信誉组成。联盟用户可根据信誉组成建议实施优化,获得更多的防护能力。 三、联盟计划下安全防护的工作机制 根据评分值动态计算用户的DDoS防护能力,绝大部分用户都将免费获得增量DDoS防护量。根据安全信誉分计算出的黑洞触发阈值(即攻击防护上限,超过该上限就触发黑洞策略),可用于ECS及SLB当天低于该阈值攻击的无偿防护。当受攻击数次被黑洞时,黑洞触发阈值会下降到原默认阈值。如果攻击大小超过安全信誉计算的最新阈值,则会触发机房对该攻击IP的黑洞。随着攻击的发生,将影响下个周期的安全信誉评分。加入联盟计划所获得的安全防护能力,是一个共享资源池,阿里云将尽力提供给您根据您的信誉评分而获得的安全防护带宽。但在加入联盟的会员遭遇集体性的攻击或其他等恶意攻击事件,而导致共享资源池的资源耗尽时,阿里云将会降低给您的安全防护带宽。针对个别黑洞过于频繁的用户,阿里云保留延长黑洞时长和降低黑洞阈值的权利,具体黑洞阈值和黑洞时长以控制台显示为准。如攻击流量超过您的安全信誉防护联盟提供的增量防护能力,您应及时按云盾的防护建议购买DDoS高防产品,以获得更好的安全防护能力,否则您的ECS、SLB可能会被攻击导致服务中断风险。请注意信息安全,保密自有安全信誉分及据此得出的相关信息。 四、申请加入流程 通过云盾DDoS基础防护管理控制台提出加入申请。自愿申请加入安全信誉防护联盟计划并同意遵守《安全信誉防护联盟规则》。申请成功后,即可查看安全信誉信息。 五、安全信息防护联盟服务条款1 您理解并确认,您不应利用基于加入联盟计划而将阿里云提供给您的安全防护能力从事如下行为: 1.1 为他人提供有偿或无偿安全防护的业务; 1.2 进行任何非法业务、进行任何不符合阿里云在阿里云官网(www.aliyun.com)公布的使用目的或流程的行为、或进行任何经阿里云自身判断不符合安全防护能力使用目的行为; 1.3 进行上传、下载或传播如下信息的行为或为他人上传、下载或传播该等信息提供便利: 1.3.1 违反国家规定的政治宣传和/或新闻; 1.3.2 涉及国家秘密和/或安全; 1.3.3 封建迷信和/或淫秽、色情和/或教唆犯罪; 1.3.4 博彩有奖、赌博游戏、“私服”、“外挂”等非法互联网出版活动; 1.3.5 违反国家民族和宗教政策; 1.3.6 妨碍互联网运行安全; 1.3.7 侵害他人合法权益和/或其他有损于社会秩序、社会治安、公共道德的活动; 1.3.8 其他违反法律法规、部门规章或国家政策的内容。 1.4 修改、翻译、改编、出租、转许可、在信息网络上传播或转让阿里云提供的软件/服务,也不得逆向工程、反编译或试图以其他方式发现阿里云提供的软件的源代码; 1.5 进行任何破坏或试图破坏网络安全的行为(包括但不限于钓鱼,黑客,网络诈骗,网站或空间中含有或涉嫌散播:病毒、木马、恶意代码,及通过虚拟服务器对其他网站、服务器进行涉嫌攻击行为如扫描、嗅探、ARP欺骗、DDoS等); 1.6 不进行任何改变或试图改变阿里云提供的系统配置或破坏系统安全的行为; 1.7 不利用阿里云提供的服务/能力从事损害阿里云、阿里云的关联公司或阿里巴巴集团内包括但不限于阿里巴巴、淘宝、支付宝、阿里妈妈、阿里金融等(以下统称为阿里巴巴公司)各公司、网站合法权益之行为,前述损害阿里巴巴公司、网站合法权益的行为包括但不限于违反阿里巴巴公司公布的任何服务协议/条款、管理规范、交易规则等规范内容、破坏或试图破坏阿里巴巴公司公平交易环境或正常交易秩序等; 1.8 不从事其他违法、违规或违反本《安全信息防护联盟规则》的行为; 1.9 您理解阿里云同意您加入计划的前提,是基于您做出的前述承诺,如您违反您的前述承诺,阿里云有权终止向您提供基于本联盟而提供的服务/能力,同时有权经通知您,终止您的联盟会员身份。 2 您理解并确认,阿里云有权根据自身的业务计划或联盟运营情况等因素,随时终止本联盟计划而不负任何责任,在计划终止前,阿里云将提前通知您。计划终止时,您基于加入联盟计划而获得的能力/服务将一并终止。 3 您理解并确认,您已阅读《联盟计划下安全防护的工作机制》以及本《安全信誉联盟规则》并知悉您加入该计划后将会产生的结果,您加入该计划是出于您的自愿以及经过独立审慎的判断,因此,您对自己加入本联盟的行为及其产生的结果负责。 4 阿里云和您都应对您是否加入该联盟计划的情况进行保密,除非该信息已进入共有领域或阿里云依据双方的另行约定、法律法规的规定、以及相关权力机关的要求、命令、判决披露。同时您需对您安全信誉分及在此基础上生成的黑洞触发阈值及相关安全信誉信息保密,以防止该信息泄露后,引起黑客针对性攻击等不利后果的发生。 5 阿里云可能会定期或不定期的对于联盟计划下的安全防护机制进行优化或变更,阿里云将经提前通知您后向您提供最新版本的服务/或依据最新的工作体制向您提供服务/能力,如您不同意经优化后的安全防护机制,你可申请退出联盟计划并终止使用阿里云向您提供的服务。 6 您理解并确认,您加入联盟计划所获得的安全防护能力,是联盟成员共享资源池,阿里云将尽力提供给您根据您的信誉评分而获得的安全防护带宽,但在联盟会员遭遇集体性的攻击或其他等恶意攻击事件,共享资源池的带宽资源耗尽时,阿里云将会降低给您的安全防护带宽但(应不低于原机房默认阈值)。 7 免责与责任限制:您加入联盟后,获得的阿里云提供的安全防护是阿里云采取的一种技术措施,您理解并确认,阿里云按照《安全信誉防护联盟计划》执行上述技术措施,即视为提供了无瑕疵的安全防护,在阿里云无故意或重大过失的情况下,阿里云不对安全防护的结果承担责任。 8 如因您的网站遭遇计算机病毒、网络入侵和攻击破坏(包括但不限于DDoS)等危害网络安全事项或行为(以下统称该等行为),如果超过服务说明中防护范围,将会造成网站或服务在一定时间内不可被最终用户访问(以下统称“服务不可用”)。您理解并确认,该类服务不可用为阿里云履行安全防护服务的正常履行行为,并将不视为阿里云对相关服务的违约;如该行为给阿里云带来危害,或影响阿里云与国际互联网或者阿里云与特定网络、服务器及阿里云内部的通畅联系,阿里云将保留暂停或终止按照联盟工作机制向您提供安全防护服务的权利(但阿里云暂停或终止时,将及时通知您),而无须承担任何义务和责任。 9 阿里云官网上公布的相关规则、规范和流程是本规则的完整组成部分,阿里云有权利随时对上述规则、规范和流程予以修改,并有权利在通知您后要求您符合最新修订的内容。
    踩1 评论0
  • 回答了问题 2018-05-01

    我公司在河南省济源市农村信用社开户,可是在认证时选择的开户行里有农村信用社

    详细解答可以参考官方帮助文档若通过企业对公银行卡进行实名认证时,开户行选项中没有您的开户行选项,说明目前阿里云暂不支持向该银行打款。建议您使用企业支付宝进行认证。
    踩1 评论0
  • 提交了问题 2018-04-07

    已经在主机控制中做了301重定向的设置

  • 提交了问题 2018-03-13

    想内存增加,怎么收费

  • 回答了问题 2018-02-18

    回调服务器有什么要求

    详细解答可以参考官方帮助文档 适用场景 OSS在上传文件完成的时候可以提供回调(Callback)给应用服务器。您只需要在发送给OSS的请求中携带相应的Callback参数,即能实现回调。现在支持CallBack的API 接口有:PutObject、PostObject、CompleteMultipartUpload。 上传回调的一种典型应用场景是与授权第三方上传同时使用,客户端在上传文件到OSS的时候指定到服务器端的回调,当客户端的上传任务在OSS执行完毕之后,OSS会向应用服务器端主动发起HTTP请求进行回调,这样服务器端就可以及时得到上传完成的通知从而可以完成诸如数据库修改等操作,当回调请求接收到服务器端的响应之后OSS才会将状态返回给客户端。 OSS在向应用服务器发送POST回调请求的时候,会在POST请求的body中包含一些参数来携带特定的信息。这些参数有两种,一种是系统定义的参数,如Bucket名称、Object名称等;另外一种是自定义的参数,您可以在发送带回调的请求给OSS的时候根据应用逻辑的需要指定这些参数。您可以通过使用自定义参数来携带一些和应用逻辑相关的信息,比如发起请求的用户id等。具体使用自定义参数的方法可以参考Callback。 通过适当的使用上传回调机制,能很好的降低客户端的逻辑复杂度和网络消耗。流程如下: 说明 上传回调支持的地域包括中国大陆区域(暂不支持华北3、华北5)、香港区域、亚太东南1、亚太东南2、美东、美西、亚太东北1、欧洲中部1、中东东部1。 目前只有简单上传(PutObject)、表单上传(PostObject)、分片上传完成(Complete Multipart Upload)操作支持上传回调功能。 功能使用参考 API:Callback iOS SDK 上传后回调通知 最佳实践 Web端直传实践及上传回调 快速搭建移动应用上传回调服务
    踩1 评论0
  • 提交了问题 2018-02-08

    签名公开的访问URL

  • 回答了问题 2018-01-26

    能恢复吗,怎么恢复

    详细解答可以参考官方帮助文档本文档包含购买流程和此服务的发票申请流程 购买流程  访问云虚拟主机数据备份/恢复服务 选择商品的规格:网站数据(不含数据库)、网站及数据库数据 。 单击 立即购买 。 到订单确认页面,单击 提交订单并支付 。 选择支付方式, 并确认支付 。 支付成功 。 进入 云市场管理控制台,单击 已经购买的服务 。 单击 管理 可以查看服务的进度和详细信息 。 购买成功后,请务必及时准确的单击 提交需求 ,填写需求信息 。如果是覆盖恢复数据,请务必保证现有数据已经备份到本地,数据恢复后会覆盖现有的数据。   查看发票申请帮助            
    踩1 评论0
  • 提交了问题 2018-01-16

    通过ecs服务器无法连接到rds

  • 回答了问题 2018-01-14

    PPAS使用

    详细解答可以参考官方帮助文档 通过本文档中的示例,Oracle 用户可以快速了解 PPAS 数据库中的术语及概念,以便在迁移及开发过程中提高效率。 以下所有操作基于一个基础模型,通过此模型用户可以看到 RDS for PPAS 中最基本的创建数据库、创建数据表、管理用户等操作,基础数据模型如下: 同时,为了模拟 Oracle 上类似的环境,我们会建立一名字为 orcl_ppas 的数据库(database),在此数据库中建立名为 scott 的用户,并建立与这个用户同名的 schema 用户空间。 PPAS兼容性手册 关于PPAS兼容性说明的完整内容,请参见阿里云PPAS兼容性手册。 连接数据库 psql psql -h ppasaddress.ppas.rds.aliyuncs.com -p 3433 -U myuser -d template1 用户 myuser 的口令: psql.bin (9.4.1.3, 服务器 9.3.5.14) 输入 'help' 来获取帮助信息. template1=> 创建并连接数据库 CREATE DATABASE template1=> CREATE DATABASE orcl_ppas; CREATE DATABASE template1=> \c orcl_ppas psql.bin (9.4.1.3, 服务器 9.3.5.14) 创建普通用户 CREATE ROLE orcl_ppas=> CREATE ROLE scott LOGIN PASSWORD 'scott123'; CREATE ROLE 创建用户的私有空间 CREATE SCHEMA orcl_ppas=> CREATE SCHEMA scott; CREATE SCHEMA orcl_ppas=> GRANT scott TO myuser; GRANT ROLE orcl_ppas=> ALTER SCHEMA scott OWNER TO scott; ALTER SCHEMA orcl_ppas=> REVOKE scott FROM myuser; REVOKE ROLE 说明 如果在进行 ALTER SCHEMA scott OWNER TO scott 之前没有将 scott 加入到 myuser 角色,将会出现如下权限问题。ERROR:must be member of role 'scott' 从安全角度出发,在处理完 OWNER 的授权后,请将 scott 用户移出 myuser 角色以提高安全性。 连接到 orcl_ppas 数据库 说明 此步骤十分重要,以下所有操作都是在 scott 账号下进行的,否则所建立的数据表及各种数据库对象将不属于 scott用户,导致权限问题。 [root@localhost bin]# ./psql -h ppasaddress.ppas.rds.aliyuncs.com -p 3433 -U scott -d orcl_ppas 用户 scott 的口令: psql.bin (9.4.1.3, 服务器 9.3.5.14) 输入 'help' 来获取帮助信息. orcl_ppas=> 创建数据表 CREATE TABLE CREATE TABLE dept ( deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY, dname VARCHAR2(14) CONSTRAINT dept_dname_uq UNIQUE, lock VARCHAR2(13) ); CREATE TABLE emp ( empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2) CONSTRAINT emp_sal_ck CHECK (sal > 0), comm NUMBER(7,2), deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk REFERENCES dept(deptno) ); CREATE TABLE jobhist ( empno NUMBER(4) NOT NULL, startdate DATE NOT NULL, enddate DATE, job VARCHAR2(9), sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2), chgdesc VARCHAR2(80), CONSTRAINT jobhist_pk PRIMARY KEY (empno, startdate), CONSTRAINT jobhist_ref_emp_fk FOREIGN KEY (empno) REFERENCES emp(empno) ON DELETE CASCADE, CONSTRAINT jobhist_ref_dept_fk FOREIGN KEY (deptno) REFERENCES dept (deptno) ON DELETE SET NULL, CONSTRAINT jobhist_date_chk CHECK (startdate 创建视图 CREATE OR REPLACE VIEW CREATE OR REPLACE VIEW salesemp AS SELECT empno, ename, hiredate, sal, comm FROM emp WHERE job = 'SALESMAN'; 创建序列 CREATE SEQUENCE CREATE SEQUENCE next_empno START WITH 8000 INCREMENT BY 1; 插入数据 INSERT INTO INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO dept VALUES (20,'RESEARCH','DALLAS'); INSERT INTO dept VALUES (30,'SALES','CHICAGO'); INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON'); INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,'17-DEC-80',800,NULL,20); INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,'20-FEB-81',1600,300,30); INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,'22-FEB-81',1250,500,30); INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,'02-APR-81',2975,NULL,20); INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,'28-SEP-81',1250,1400,30); INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,'01-MAY-81',2850,NULL,30); INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,'09-JUN-81',2450,NULL,10); INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,'19-APR-87',3000,NULL,20); INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,'17-NOV-81',5000,NULL,10); INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,'08-SEP-81',1500,0,30); INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,'23-MAY-87',1100,NULL,20); INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,'03-DEC-81',950,NULL,30); INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,'03-DEC-81',3000,NULL,20); INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,'23-JAN-82',1300,NULL,10); INSERT INTO jobhist VALUES (7369,'17-DEC-80',NULL,'CLERK',800,NULL,20,'New Hire'); INSERT INTO jobhist VALUES (7499,'20-FEB-81',NULL,'SALESMAN',1600,300,30,'New Hire'); INSERT INTO jobhist VALUES (7521,'22-FEB-81',NULL,'SALESMAN',1250,500,30,'New Hire'); INSERT INTO jobhist VALUES (7566,'02-APR-81',NULL,'MANAGER',2975,NULL,20,'New Hire'); INSERT INTO jobhist VALUES (7654,'28-SEP-81',NULL,'SALESMAN',1250,1400,30,'New Hire'); INSERT INTO jobhist VALUES (7698,'01-MAY-81',NULL,'MANAGER',2850,NULL,30,'New Hire'); INSERT INTO jobhist VALUES (7782,'09-JUN-81',NULL,'MANAGER',2450,NULL,10,'New Hire'); INSERT INTO jobhist VALUES (7788,'19-APR-87','12-APR-88','CLERK',1000,NULL,20,'New Hire'); INSERT INTO jobhist VALUES (7788,'13-APR-88','04-MAY-89','CLERK',1040,NULL,20,'Raise'); INSERT INTO jobhist VALUES (7788,'05-MAY-90',NULL,'ANALYST',3000,NULL,20,'Promoted to Analyst'); INSERT INTO jobhist VALUES (7839,'17-NOV-81',NULL,'PRESIDENT',5000,NULL,10,'New Hire'); INSERT INTO jobhist VALUES (7844,'08-SEP-81',NULL,'SALESMAN',1500,0,30,'New Hire'); INSERT INTO jobhist VALUES (7876,'23-MAY-87',NULL,'CLERK',1100,NULL,20,'New Hire'); INSERT INTO jobhist VALUES (7900,'03-DEC-81','14-JAN-83','CLERK',950,NULL,10,'New Hire'); INSERT INTO jobhist VALUES (7900,'15-JAN-83',NULL,'CLERK',950,NULL,30,'Changed to Dept 30'); INSERT INTO jobhist VALUES (7902,'03-DEC-81',NULL,'ANALYST',3000,NULL,20,'New Hire'); INSERT INTO jobhist VALUES (7934,'23-JAN-82',NULL,'CLERK',1300,NULL,10,'New Hire'); 查询优化器数据分析 ANALYZE ANALYZE dept; ANALYZE emp; ANALYZE jobhist; 建立存储过程 CREATE PROCEDURE CREATE OR REPLACE PROCEDURE list_emp IS v_empno NUMBER(4); v_ename VARCHAR2(10); CURSOR emp_cur IS SELECT empno, ename FROM emp ORDER BY empno; BEGIN OPEN emp_cur; DBMS_OUTPUT.PUT_LINE('EMPNO ENAME'); DBMS_OUTPUT.PUT_LINE('----- -------'); LOOP FETCH emp_cur INTO v_empno, v_ename; EXIT WHEN emp_cur%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_empno || ' ' || v_ename); END LOOP; CLOSE emp_cur; END; -- -- Procedure that selects an employee row given the employee -- number and displays certain columns. -- CREATE OR REPLACE PROCEDURE select_emp ( p_empno IN NUMBER ) IS v_ename emp.ename%TYPE; v_hiredate emp.hiredate%TYPE; v_sal emp.sal%TYPE; v_comm emp.comm%TYPE; v_dname dept.dname%TYPE; v_disp_date VARCHAR2(10); BEGIN SELECT ename, hiredate, sal, NVL(comm, 0), dname INTO v_ename, v_hiredate, v_sal, v_comm, v_dname FROM emp e, dept d WHERE empno = p_empno AND e.deptno = d.deptno; v_disp_date := TO_CHAR(v_hiredate, 'MM/DD/YYYY'); DBMS_OUTPUT.PUT_LINE('Number : ' || p_empno); DBMS_OUTPUT.PUT_LINE('Name : ' || v_ename); DBMS_OUTPUT.PUT_LINE('Hire Date : ' || v_disp_date); DBMS_OUTPUT.PUT_LINE('Salary : ' || v_sal); DBMS_OUTPUT.PUT_LINE('Commission: ' || v_comm); DBMS_OUTPUT.PUT_LINE('Department: ' || v_dname); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Employee ' || p_empno || ' not found'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('The following is SQLERRM:'); DBMS_OUTPUT.PUT_LINE(SQLERRM); DBMS_OUTPUT.PUT_LINE('The following is SQLCODE:'); DBMS_OUTPUT.PUT_LINE(SQLCODE); END; -- -- Procedure that queries the 'emp' table based on -- department number and employee number or name. Returns -- employee number and name as IN OUT parameters and job, -- hire date, and salary as OUT parameters. -- CREATE OR REPLACE PROCEDURE emp_query ( p_deptno IN NUMBER, p_empno IN OUT NUMBER, p_ename IN OUT VARCHAR2, p_job OUT VARCHAR2, p_hiredate OUT DATE p_sal OUT NUMBER ) IS BEGIN SELECT empno, ename, job, hiredate, sal INTO p_empno, p_ename, p_job, p_hiredate, p_sal FROM emp WHERE deptno = p_deptno AND (empno = p_empno OR ename = UPPER(p_ename)); END; -- -- Procedure to call 'emp_query_caller' with IN and IN OUT -- parameters. Displays the results received from IN OUT and -- OUT parameters. -- CREATE OR REPLACE PROCEDURE emp_query_caller IS v_deptno NUMBER(2); v_empno NUMBER(4); v_ename VARCHAR2(10); v_job VARCHAR2(9); v_hiredate DATE; v_sal NUMBER; BEGIN v_deptno := 30; v_empno := 0; v_ename := 'Martin'; emp_query(v_deptno, v_empno, v_ename, v_job, v_hiredate, v_sal); DBMS_OUTPUT.PUT_LINE('Department : ' || v_deptno); DBMS_OUTPUT.PUT_LINE('Employee No: ' || v_empno); DBMS_OUTPUT.PUT_LINE('Name : ' || v_ename); DBMS_OUTPUT.PUT_LINE('Job : ' || v_job); DBMS_OUTPUT.PUT_LINE('Hire Date : ' || v_hiredate); DBMS_OUTPUT.PUT_LINE('Salary : ' || v_sal); EXCEPTION WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('More than one employee was selected'); WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('No employees were selected'); END; 建立函数 CREATE FUNCTION CREATE OR REPLACE FUNCTION emp_comp ( p_sal NUMBER, p_comm NUMBER ) RETURN NUMBER IS BEGIN RETURN (p_sal + NVL(p_comm, 0)) * 24; END; -- -- Function that gets the next number from sequence, 'next_empno', -- and ensures it is not already in use as an employee number. -- CREATE OR REPLACE FUNCTION new_empno RETURN NUMBER IS v_cnt INTEGER := 1; v_new_empno NUMBER; BEGIN WHILE v_cnt > 0 LOOP SELECT next_empno.nextval INTO v_new_empno FROM dual; SELECT COUNT(*) INTO v_cnt FROM emp WHERE empno = v_new_empno; END LOOP; RETURN v_new_empno; END; -- -- EDB-SPL function that adds a new clerk to table 'emp'. This function -- uses package 'emp_admin'. -- CREATE OR REPLACE FUNCTION hire_clerk ( p_ename VARCHAR2, p_deptno NUMBER ) RETURN NUMBER IS v_empno NUMBER(4); v_ename VARCHAR2(10); v_job VARCHAR2(9); v_mgr NUMBER(4); v_hiredate DATE; v_sal NUMBER(7,2); v_comm NUMBER(7,2); v_deptno NUMBER(2); BEGIN v_empno := new_empno; INSERT INTO emp VALUES (v_empno, p_ename, 'CLERK', 7782, TRUNC(SYSDATE), 950.00, NULL, p_deptno); SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno INTO v_empno, v_ename, v_job, v_mgr, v_hiredate, v_sal, v_comm, v_deptno FROM emp WHERE empno = v_empno; DBMS_OUTPUT.PUT_LINE('Department : ' || v_deptno); DBMS_OUTPUT.PUT_LINE('Employee No: ' || v_empno); DBMS_OUTPUT.PUT_LINE('Name : ' || v_ename); DBMS_OUTPUT.PUT_LINE('Job : ' || v_job); DBMS_OUTPUT.PUT_LINE('Manager : ' || v_mgr); DBMS_OUTPUT.PUT_LINE('Hire Date : ' || v_hiredate); DBMS_OUTPUT.PUT_LINE('Salary : ' || v_sal); DBMS_OUTPUT.PUT_LINE('Commission : ' || v_comm); RETURN v_empno; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('The following is SQLERRM:'); DBMS_OUTPUT.PUT_LINE(SQLERRM); DBMS_OUTPUT.PUT_LINE('The following is SQLCODE:'); DBMS_OUTPUT.PUT_LINE(SQLCODE); RETURN -1; END; -- -- PostgreSQL PL/pgSQL function that adds a new salesman -- to table 'emp'. -- CREATE OR REPLACE FUNCTION hire_salesman ( p_ename VARCHAR, p_sal NUMERIC, p_comm NUMERIC ) RETURNS NUMERIC AS $$ DECLARE v_empno NUMERIC(4); v_ename VARCHAR(10); v_job VARCHAR(9); v_mgr NUMERIC(4); v_hiredate DATE; v_sal NUMERIC(7,2); v_comm NUMERIC(7,2); v_deptno NUMERIC(2); BEGIN v_empno := new_empno(); INSERT INTO emp VALUES (v_empno, p_ename, 'SALESMAN', 7698, CURRENT_DATE, p_sal, p_comm, 30); SELECT INTO v_empno, v_ename, v_job, v_mgr, v_hiredate, v_sal, v_comm, v_deptno empno, ename, job, mgr, hiredate, sal, comm, deptno FROM emp WHERE empno = v_empno; RAISE INFO 'Department : %', v_deptno; RAISE INFO 'Employee No: %', v_empno; RAISE INFO 'Name : %', v_ename; RAISE INFO 'Job : %', v_job; RAISE INFO 'Manager : %', v_mgr; RAISE INFO 'Hire Date : %', v_hiredate; RAISE INFO 'Salary : %', v_sal; RAISE INFO 'Commission : %', v_comm; RETURN v_empno; EXCEPTION WHEN OTHERS THEN RAISE INFO 'The following is SQLERRM:'; RAISE INFO '%', SQLERRM; RAISE INFO 'The following is SQLSTATE:'; RAISE INFO '%', SQLSTATE; RETURN -1; END; 建立规则 CREATE RULE CREATE OR REPLACE RULE salesemp_i AS ON INSERT TO salesemp DO INSTEAD INSERT INTO emp VALUES (NEW.empno, NEW.ename, 'SALESMAN', 7698, NEW.hiredate, NEW.sal, NEW.comm, 30); CREATE OR REPLACE RULE salesemp_u AS ON UPDATE TO salesemp DO INSTEAD UPDATE emp SET empno = NEW.empno, ename = NEW.ename, hiredate = NEW.hiredate, sal = NEW.sal, comm = NEW.comm WHERE empno = OLD.empno; CREATE OR REPLACE RULE salesemp_d AS ON DELETE TO salesemp DO INSTEAD DELETE FROM emp WHERE empno = OLD.empno; 建立触发器 CREATE TRIGGER CREATE OR REPLACE TRIGGER user_audit_trig AFTER INSERT OR UPDATE OR DELETE ON emp DECLARE v_action VARCHAR2(24); BEGIN IF INSERTING THEN v_action := ' added employee(s) on '; ELSIF UPDATING THEN v_action := ' updated employee(s) on '; ELSIF DELETING THEN v_action := ' deleted employee(s) on '; END IF; DBMS_OUTPUT.PUT_LINE('User ' || USER || v_action || TO_CHAR(SYSDATE,'YYYY-MM-DD')); END; CREATE OR REPLACE TRIGGER emp_sal_trig BEFORE DELETE OR INSERT OR UPDATE ON emp FOR EACH ROW DECLARE sal_diff NUMBER; BEGIN IF INSERTING THEN DBMS_OUTPUT.PUT_LINE('Inserting employee ' || :NEW.empno); DBMS_OUTPUT.PUT_LINE('..New salary: ' || :NEW.sal); END IF; IF UPDATING THEN sal_diff := :NEW.sal - :OLD.sal; DBMS_OUTPUT.PUT_LINE('Updating employee ' || :OLD.empno); DBMS_OUTPUT.PUT_LINE('..Old salary: ' || :OLD.sal); DBMS_OUTPUT.PUT_LINE('..New salary: ' || :NEW.sal); DBMS_OUTPUT.PUT_LINE('..Raise : ' || sal_diff); END IF; IF DELETING THEN DBMS_OUTPUT.PUT_LINE('Deleting employee ' || :OLD.empno); DBMS_OUTPUT.PUT_LINE('..Old salary: ' || :OLD.sal); END IF; END; 建立包 CREATE PACKAGE CREATE OR REPLACE PACKAGE emp_admin IS FUNCTION get_dept_name ( p_deptno NUMBER ) RETURN VARCHAR2; FUNCTION update_emp_sal ( p_empno NUMBER, p_raise NUMBER ) RETURN NUMBER; PROCEDURE hire_emp ( p_empno NUMBER, p_ename VARCHAR2, p_job VARCHAR2, p_sal NUMBER, p_hiredate DATE, p_comm NUMBER, p_mgr NUMBER, p_deptno NUMBER ); PROCEDURE fire_emp ( p_empno NUMBER ); END emp_admin; 建立包体 CREATE PACKAGE BODY -- -- Package body for the 'emp_admin' package. -- CREATE OR REPLACE PACKAGE BODY emp_admin IS -- -- Function that queries the 'dept' table based on the department -- number and returns the corresponding department name. -- FUNCTION get_dept_name ( p_deptno IN NUMBER ) RETURN VARCHAR2 IS v_dname VARCHAR2(14); BEGIN SELECT dname INTO v_dname FROM dept WHERE deptno = p_deptno; RETURN v_dname; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Invalid department number ' || p_deptno); RETURN ''; END; -- -- Function that updates an employee's salary based on the -- employee number and salary increment/decrement passed -- as IN parameters. Upon successful completion the function -- returns the new updated salary. -- FUNCTION update_emp_sal ( p_empno IN NUMBER, p_raise IN NUMBER ) RETURN NUMBER IS v_sal NUMBER := 0; BEGIN SELECT sal INTO v_sal FROM emp WHERE empno = p_empno; v_sal := v_sal + p_raise; UPDATE emp SET sal = v_sal WHERE empno = p_empno; RETURN v_sal; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Employee ' || p_empno || ' not found'); RETURN -1; WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('The following is SQLERRM:'); DBMS_OUTPUT.PUT_LINE(SQLERRM); DBMS_OUTPUT.PUT_LINE('The following is SQLCODE:'); DBMS_OUTPUT.PUT_LINE(SQLCODE); RETURN -1; END; -- -- Procedure that inserts a new employee record into the 'emp' table. -- PROCEDURE hire_emp ( p_empno NUMBER, p_ename VARCHAR2, p_job VARCHAR2, p_sal NUMBER, p_hiredate DATE, p_comm NUMBER, p_mgr NUMBER, p_deptno NUMBER ) AS BEGIN INSERT INTO emp(empno, ename, job, sal, hiredate, comm, mgr, deptno) VALUES(p_empno, p_ename, p_job, p_sal, p_hiredate, p_comm, p_mgr, p_deptno); END; -- -- Procedure that deletes an employee record from the 'emp' table based -- on the employee number. -- PROCEDURE fire_emp ( p_empno NUMBER ) AS BEGIN DELETE FROM emp WHERE empno = p_empno; END; END;
    踩1 评论0
  • 提交了问题 2018-01-03

    上传的网站程序打不开

  • 提交了问题 2017-12-30

    是否可以用回调来实现上传百分比

正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息