网站首页 留学 移民 外语考试 英语词汇 法语词汇 旧版资料
标题 | 【转载】美国留学procedure |
内容 |
acc (zcaid number,zraid number,accountes INOUTnumber) is flags number; begin update accounts set money=money+accountes where aid=zraid returning flag into flags; ifsql%rowcount=0then raise_application_error(-20002,'目标账号不存在'); elsif(flags=1)then raise_application_error(-20003,'目标账号已被锁定'); endif; update accounts set money=money-accountes where aid=zcaid returning money into accountes; if(accountes=10)then raise_application_error(-20004,'你帐户余额不足十元请取消操作'); endif; commit; end; --- DECLARE v1NUMBER:=300; BEGIN acc(9,10,v1); dbms_output.put_line(v1); END; 包的使用 CREATEORREPLACEPROCEDURE hello( p_emp INOUT emp.ename%TYPE ) --- AS BEGIN p_emp:=upper(p_emp); dbms_output.put_line('hello,'||p_emp); END; CREATEORREPLACEPACKAGE bao_1 AS PROCEDURE hello(p_emp emp.ename%TYPE); FUNCTION add_number(a NUMBER,b NUMBER)RETURNNUMBER; END; CREATEORREPLACEPACKAGEBODY bao_1 AS PROCEDURE hello(p_emp emp.ename%TYPE) AS BEGIN --p_emp:=upper(p_emp); dbms_output.put_line('hello,'||p_emp); END; FUNCTION add_number(a NUMBER,b NUMBER)RETURNNUMBER AS BEGIN RETURN NVL(a,0)+NVL(b,0); END; END; CALL bao_1.hello('lovo'); SELECT bao_1.add_number(10,NULL)FROM dual; createorreplaceprocedure acc (zcaid number,zraid number,accountes INOUTnumber) is flags number; begin update accounts set money=money+accountes where aid=zraid returning flag into flags; ifsql%rowcount=0then raise_application_error(-20002,'目标账号不存在'); elsif(flags=1)then raise_application_error(-20003,'目的账号已被锁定'); endif; update accounts set money=money-accountes where aid=zcaid returning money into accountes; if(accountes=10)then raise_application_error(-20004,'你帐户余额不足十元请撤消操作'); endif; commit; end; --- DECLARE v1NUMBER:=300; BEGIN acc(9,10,v1); dbms_output.put_line(v1); END; select*from accounts --特点:无返回值存储过程 Connection conn=.; String spName="{call acc(?,?,?)}"; CallableStatement cstmt=conn.prepareCall(spName); cstmt.setString(1,"值"); … cstmt.executeUpdate(); --特色:有返回值存储过程,返回一个值 Connection conn=.; String spName="{call acc(?,?,?)}"; CallableStatement cstmt=conn.prepareCall(spName); cstmt.setInt(1,9); cstmt.setInt(2,10); cstmt.setInt(2,150); cstmt.registerOutParameter(3,java.sql.Types.DOUBLE); cstmt.executeUpdate(); int money=cstmt.getInt(3); System.out.println("余额:"+money); 1.只读事务--只读事务 只读事务是指只容许执行查询的事务,而不许可执行其它任何dml 操作的事务,使用只读事务可以确保用户只能获得某时光点的数据, 假定:机票代售票点天天18点开端统计今天的销售情况,这时可以 应用只读事务,在设置了只读事务后,只管其它会话可能会提交新的事务 ,然而只读事务将不会取得新数据的变更,从而可以保障取得特定时间 点的数据信息。 --在做统计的时候同时也在卖票。不可能在统计的统计的时候不答应卖票 --设置吟诗事务 settransactionreadonly --示例:1.以system登陆 再set transactionreadonly 连到scott/tiger登陆,select*from emp;有18行列出来了 再增加一条数据 insertinto emp(empno,ename,hiredate)values(111,'zbm',to_date('2000-10-01','yyyy-mm-dd')); commit; 在scott中能看得到该用户zbm 在system用户中不能看到该用户zbm--select*from scott.emp; --在个用户中设置了只读事务,之后的操作就不能读出来了。 --一般主要用在机票代售点,银行的本钱的统计,职员工资的统计 --字符函数 lower(char):将字符串转成小写的格式 upper(char):将字符串转居大写的格式 length(char):返回字符串的长度 substr(char,m,n):取字符串的子串 replace(char,search_string,repalce_string) --将姓名按小/大写显示 select lower(ename)from emp; select upper(ename)from emp; --显示正好为5个字符的员工姓名 select ename ename from emp where length(ename)=5; --显示所有员工的前三个字符 select substr(ename,0,3)from emp; --以首字母大写的方式显示所有的员工 select upper(substr(ename,0,1))||lower(substr(ename,1,len gth(ename)-1))from emp; --以首字母小写的方式显示所有的员工 select lower(substr(ename,0,1))||upper(substr(ename,1,len gth(ename)-1))from emp; --把名字中的a字母替为我 selectreplace(ename,'A','我')from emp; --数字函数 round(n,[m]):四舍五入,没m舍到整数,m为正数,舍到小数后m位,m为负数,舍到数前m位 trunc(n,[m]):截取数字,与round一样,只不外前者是四舍五入,后者是截取 mod(m,n):取模 floor(n):返回小于或等于n的最大整数 ceil(n):返回大于n或即是n的最小整数 --对数字的处理,在财务系统或在银行顶用的最多,不同的处理办法 --对账务报表有不同的成果 用四种方法算年薪 用round select(round(sal)+round(comm))*13as年薪from emp where ename='ALLEN';--24700 select(round(sal,2)+round(comm,2))*13as年薪from emp where ename='ALLEN';--24877 用trunc select(trunc(sal)+trunc(comm))*13as年薪from emp where ename='ALLEN';--24700 用floor,用ceil一样 selectmod(10,3)from dual;--1 --例,数据:2345.56 45.94 --显示在一个月为30天的情况下所有员工的日薪金,疏忽余数 select*from emp forupdate; --用 oracle第四天 --日期专题 日期函数用于处置date类型的数据,默认日期格局是:dd-mon-yy即12-7月-78 1).sysdate:该函数返回系统时间selectsysdatefrom dual; 2).add_months(d,n) 3).last_day(d):返回指定日期所在月份的最后一天 --题目一:查找已经入职8个月多的员工 select*from emp wheresysdate add_months(hiredate,200); --题目二:显示满10年服务年限的员工的姓名和受雇日期。 select ename,hiredate from emp wheresysdate add_months(hiredate,120); --题目三:对于每一个员工,显示其参加公司的天数。 select ename,sysdate-hiredate as"入职天数"from emp; --标题四:找出各月倒数第3天受雇的所有员工。(在结账的时候很有用) select hiredate,last_day(hiredate),last_day(hiredate)-2from emp; --转换函数 1.不必函数也能转换 insertinto emp(empno,ename)values('001','张三丰'); 2.字符串转化函数 select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss')from emp; select ename,to_char(sal,'L 99999.999')from emp;--L表示本地的货币符号 select ename,to_char(sal,'L99,999.99')as rmb from emp;--L表现本地的货泉符号 select ename,to_char(sal,'$99,999.99')as rmb from emp; 3.显示1980年入职的员工 select*from emp where to_char(hiredate,'yyyy')=1981; 4.显示所有12月份入职的员工 select*from emp where to_char(hiredate,'mm')=12; 1.数据库管理员,管理员有基础职责 2.数据库/表的逻辑备份与恢复 3.数据字典和动态机能视图 4.管理表空间和数据文件,数据字典,性能视图 解释:每个数据库应当至少有一名数据库管理员dba ,但我国中小企业个别不,至公司的dba做什么呢? --职责 1).安装和进级oracle数据库 2).建库,表空间,表,视图,索引. 3).制订并实行备份与恢复打算 4).数据库权限治理,调优,故障消除--重点 5).对高等dba,请求能参加名目开发,会编写sql语句服务器数据恢复,存储进程 ,触发器,规矩,约束,包 --体系函数 1.查看当前用户,及当前数据库--db_name 在sqlplus下show user; 或 select sys_context('userenv','session_user')from dual; select sys_context('userenv','db_name')from dual;--orcl 2.查看当前所用语言---language select sys_context('userenv','language')from dual; 3.显示当前会话客户所对应的默认方案名--方案和用户关系? --用户创立之后,会主动创建一个方案,方案与用户同名,方案中有各种 --对象,如触发器,表,视图,过程等 select sys_context('userenv','current_schema')from dual; 4.显示当前主机名 select sys_context('userenv'数据恢复,'host')from dual; sys和system比拟1.存储数据的主要性不同 占有数据库管理员角色dba --sys用户:(其方案中有基表,动态视图)系统管理员角色sysdba 系统操作员角色sysoper 角色:数据库管理员角色dba --system用户:(方案中为次级数据:)系统管理员角色sysdba 2.权限不同 1).sys用户必须以as sysdba或as sysopr情势登陆,不能以nomal方式登陆数据库 system是畸形登陆,它其实就是一个一般的dba用户,但作为as sysdba登陆,其结果 实际上它作为sys用户登录的,从登陆信息咱们可以看出。 sqlplus sys/tigertiger assysdba可以登陆 conn sys/tigertiger;--你不再衔接到ORACLE。 conn sys/tigertger assysdba;--可以连接 即:conn system/tigertiger是以普通的dba的身份登陆的(conn system/tigertiger asdba) 3.权限比较。sysdba sysoper dba sysdba sysoper startup(启动数据库)startup shutdown shutdown alterdatabaseopen/mount/backup一样 转变字符集--none createdatabase(创建数据库)--不能 dropdatabase(删除数据库)--不能 createspfile createspfile alterdatabasearchivelog(归档日志)一样 alterdatabaserecover(恢复数据库)只能完整恢复不能不完全恢复 拥有restricted session会话拥有restricted session权限 可以让用户用为sys用户连接可以进行一些根本的操作,不能查看用户数据 登陆之后是sys登陆之后是public --dba的权限是登陆之后才有的对数据库的操作 4.数据库管理员的工作 1).显示初始化参数,200多个初始化参数 show parameter命令,在init.ora文件中去D:\oracle\srvm\admin\init.ora 5.数据库表的逻辑备份与恢复 逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程,逻辑 恢复是指当数据库对象被误操作而破坏后使用工具import应用备份的文件把数据 对象导入到数据库的过程。物理备份即可在数据库的open的状态下进行也可以 在封闭数据库落后行,但是逻辑备份和恢复在open的状态下进行(即数据库翻开时进行)。 --导出分三品种型: 导出表,导出方案,导出数据库三种方式 导出使用exp命令来完成的,该命令常用的选项有: userid:用于指定执行导出操作的用户名,口令,连接字符串 tables:用于指定履行导出操作的表 owner:用于指定执行导出操作的方案 full=y:用于指定执行导出操作的数据库 inctype:用于指定执行导出操作的增量类型 file:用于指定导出文件名 一.导出表 1.导出本人的表,进到oracle装置的bin目录下,D:\oracle\BIN再执行以下的命令 exp userid=scott/tigertiger@orcl tables=(emp,dept)file=d:\e1.dmp 2.导出其它方案的表 如果用户要导出其它方案的表,则需要dba的权限或是 exp_full_database的权限,比方system就可以导出scott的表 exe userid=system/tiger@orcl tables=(scott.emp)file=d:\e2.dmp --scott.emp--哪一个计划的表 3.导出表结构 exp userid=scott/tiger@orcl tables=(emp)file=d:\e3.dmp rows=n 导出大表的构造,数据量大的时候exp userid=scott/tiger@orcl tables=(emp)file=d:\e3.dmp direct=y 三.导出方案 导出方案是支使用export工具导出一个方案或是多个方案中的所有对象(表,索引,束缚) 和数据,并存放到文件中。 1).导出自己的方案 exp scott/tiger@orcl owner=scott file=d:\scott.emp 2).导出其它方案 exp_full_database的权限,例如system用户就能够导出任何方案 exp system/tiger@orcl owner=(system,scott)file=d:\system.dmp 4.导出数据库 exp userid=system/tiger@orcl full=y inctype=completefile=d:/aa.dmp 二.导入表 1).导入自己表 imp userid=scott/tiger@orcl tables=(emp)file=d:\x.dmp 2).导入表到其它用户 要求该用户具有dba权限,或是imp_full_database imp userid=system/tiger@orcl tables=(emp)file=d:\x.dmp touser=scott 3).导入表的结构 导入表的结构而不导入数据 imp userid=scott/tiger@orcl tables=(emp)file=d:\x.dmp rows=n 4).导入数据 表已经存在,可以只导入表的数据 imp userid=scott/tiger@orcl tables=(emp)file=d:\x.dmp ignore=y --数据字典和动态性能视图 基表:数据字典是oracle数据库中最重要的组成局部,它供给了数据库的一些系统信息--存放静态信息 动态性能视图:动态性能视图记录了例程启动后的相干信息.--存入常常变化的动态信息 数据字典重要用于取得数据库信息,用户一般不能去操作它 --user_tables:当前用户领有的所有的表 select table_name from user_tables; --all_tables当前用户可以访问的所有的表,不仅自己的表,别人的表,只有 我能拜访,也能查出来 select table_name from all_tables; --dba_tables数据库中所有的表 select table_name from dba_tables;--表或视图不存在,由于你没有权限 以sys/tiger asdba;这个身份可以查看了 --数据字典和动态性能视图 用户名,权限,角色 在建立用户时,oracle会把用户的信息存放到数据字典中,当给用户 受权或是角色时,oracle会将权限跟角色的信息放到数据字典中 1.通过查询:dba_users可以显示所有的数据库用户具体信息 select username from dba_users;--把所有的用户都列出来了 select username,passwordfrom dba_users;--把所有的用户都列出来了 --密码是加密的 2.通过查询数据字典视图dba_sys_privs,可以显示用户所具有的系统权限 select*from system_privilege_map orderbyname; select username from dba_users;--把所有的用户都列出来了 3.通过查询数据字典视图dba_tab_privs可以显示用户具备的对象权限 selectdistinctprivilegefrom dba_tab_privs; 4.通过查询字典dba_col_privs可以显示用户具有的列权限 5.通过查询数据字典视图dba_role_privs可以显示用户所拥有的的角色 select*from dba_role_privs where grantee='SCOTT'; --角色和权限,一个角色里面有良多的权限, 6.查问数据库的表空间 select tablespace_name from dba_tablespaces; 7.查询oracle所有的角色,正常是dba.即:oracle空间有多少种角色 select*from dba_roles; 8.如何查询一个角色所含的权限? 实在这里面包含了:一个角包含的系统权限 select*from dba_sys_privs where grantee='DBA'; select*from dba_sys_privs where grantee='CONNECT'; 一个角色包括的对象权限 select*from dba_tab_privs where grantee='DBA'; --表空间 表空间是数据库的逻辑组成部门,从物理上讲,数据库存放在 数据文件中,从逻辑上讲,数据库则是寄存在表空间中的,表空间 由一个或是多个数据文件组成. 表空间,数据文件,表的关联? 表相当于人,表空间相当于成都这个地方,数据文件相当于人的栖身地 --表空间,段,区,块(由大到小) 画个方格(表空间),竖分三段(段),每段横分三段(区),再把最小段分三段(块) 国度,省,市,县,镇,乡,社。 Oracle中的表空间是没有限度的.--表空间 表空间是数据库的逻辑组成部分,从物理上讲,数据库存放在 数据文件中,从逻辑上讲,数据库则是存放在表空间中的,表空间 由一个或是多个数据文件组成. 表空间,数据文件,表的关系? 表相称于人,表空间相当于成都这个处所,数据文件相称于人的寓居地 --表空间,段,区,块(由大到小) 表空间的作用: 1).把持数据库占用的磁盘空间 2).dba可以将不同的数据类型安排到不同的地位,这样有利于 进步i/o性能,同时利于备份和恢复等管理操作。 --建立表空间 建立表空间是使用create tablespace命令来实现的,须要留神的是 ,普通情形下,建立表空间是特权或是dba来执行的,假如用其它用户来创建 表空间,则用户必需有create tablespace的系统权限 --建立数据库表空间 在建立数据库后,为便于管理表,最好建立自已的表空间 createtablespace data01datafile'd:\test01.dbf' size 20m uniformsize 128k --说明:执行完上述命令后,会建扬名称为data01的表空间, 并为该表空间建立名称为data01.dbf的数据库文件,区的大小为 128k, 使用数据表空间 createtable mypart( deptno number(5), dname varchar2(10), loc varchar2(15) )tablespace data01;--当初就使用表空间了 select*from mypart; insertinto mypart values(10,'hello','成都'); 改变表空间的状态 当建破表空间时,表空间处于联机(online)状况,此时该表空间 是可以访问的,并且该表空间是可以读写的,即可以查询该表空间的数据 ,而且还可以在表空间执行各种语句。但是在进行系统维护或是 数据保护时,可能需要改变表空间的状态。一般情况下,由特权 用户或是dba来操作 1).使表空间脱机 altertablespace表空间名offline 2).使表空间联机 altertablespace表空间名online 3).只读表空间 当建立表空间时,表空间可以读写,如果不盼望该表空间上 执行update,delete,insert操作,那么可以将表空间修正为 只读: altertablespace表空间名readonly altertablespace data01readonly--这个表中的数据不能修了 4).显示表空间中所有的表 select*from all_tables where tablespace_name='DATA01'; 结果:1SCOTT MYPART DATA01 5).晓得表名,查看该表属于哪个表空间 select tablespace_name美国留学,table_name from user_tables where table_name='EMP';--结果:表空间:users,表名:EMP select tablespace_name,table_name from user_tables where table_name='MYPART'; 6).删除表空间 一般情况下,由特权用户或是dba来操作,如果是其它用户操作 那么要求用户存在drop tablespace系统权限 droptablespace'表空间'includingcontentsanddatafiles; 说明:including contents表示删除表空间时,删除该空间的所有的 数据库对象,而datafiles表示将数据库文件也删除. 7).扩展表空间 表空间是由数据文件组成的,表空间的大小实际上就是数据文件相加 后的大小,那么我们可以设想,假设表employee存放到data01表空间上 ,初始大小就是2m,当数据满2m空间后,如果在向employee表插入 数据,这样就会显示空间不足的过错. 案例阐明: 一,树立一个表空间sp001 createtablespace demo01datafile'd:\demo01.dbf' size 10m uniformsize--dba才行 二,在该表空间上建立一个普通表mydment其结构和dept一样 createtable demoemp asselect*from emp where 1=2; select*from demoemp; 三,向该表中加入一数据 insertinto demoemp(select*from emp); select*from demoemp;--这样持续插入,确定会把数据库整爆 四,当必定时候就会呈现无奈扩大的问题,怎么办? 五,就扩展表空间,为其增添更多的存储空间,有三种方式: 1).增加数据文件 altertablespace sp01adddatafile'd:\test\sp01.dbf'size20m 2).增长数据文件的大小 alterdatabasedatafile'd:\test\sp01.dbf'resize20m; --这里需要注意的是数据文件的大小不要超过500m 3).设置文件的自动增加 alterdatabasedatafile'd:\test\sp01.dbf'autoextend onnext10m maxsize500m; 关键词:服务器数据 |
随便看 |
|
出国留学网为出国留学人员提供留学、移民、外语考试等出国知识,帮助用户化解出国留学过程中的各种疑难问题。