oracle sql语句 只读,Oracle_SQL语句

------------------------Oracle 的SQL 语法--------------------------=======================第(1,2)章 结 合 语 句==========================》1:创建表空间create tablespace 表空间名datafile'存放文件的路径_空间名_.dbf' size 30m;》2: 分配权限grant 权限| 角色 to 用户名》3: 创建用户create user 登陆名 identified by 密码grant connect , resource to 登陆名》4:创建唯一索引create unique index index_列_empon on 表名 (列);》5:创建序列create sequence 自定义表名 start with 1 increment by 1;》6: 查看当前序列的值select seql.currval from 表名》7:创建私有同义词create synonym e(自己定义的一个) for 表名;》8: 创建共有同义词create public synonym e for 表名;》9: 给某个用户访问的权限,可以访问该同义词grant select on e to 用户名;》10: 创建大写函数索引Create index index_ename on 表名 (upper(列));》间隔分区create table 表名partition by range (列)interval (numtoyminterval(3,'month'))(partition p1 values less than (to_date ('2013-04-01','yyyy-mm-dd')))asselect * from 表名=====================第(3)章 的 SQL 语 句=======================================PL/SQL 块可执行部分 其中变量语法如下:》1:声明变量declarev_name varchar2(20);》2: 声明和赋值declarev_Names varchar2(20):='战三';》3:循环控制---------------(1)Loop循环语法:LoopEXIT Where ---条件满足,退出END Loop;-------------(2)WHILE 循环语法:WHILK Loop要执行的语法END Loop;》4:输出语句dbms_ output.put_line ('您要输出的内容 , ZZZ.....想睡觉了.....');》5: 游标声明,打开,提取,关闭 (例子)declarecursor em_cursor isselect 列 from 表名 where (条件);--声明两个变量v_name employee name%type;v_sal employee%type;beginopen em_cursor ;--打开游标loopfetch em_cursor into v_name,v_sal --提取游标(提取行)exit when em_cursor%notfound; --判断游标是否为空,就退出dbms_output.put_line(v_name||v_sal); --输出两个变量endloop; --循环提取close em_cursor; --关闭游标end;》6: 循环游标取数据for i in 游标名 loopdbms_output.put_line('用户信息:'||i.userid||'-------'||i.username);(直接 i 不可取 i为对象)end loop;=========================第(4)章 的 SQL 语 句=======================================》1: 通过游标修改数据declarecursor userinfo is select * from t_user for update;v_name varchar2(50);beginfor i in userinfo loopv_name :=i.username;update t_user set username='王五' where current of userinfo;dbms_output.put_line('用户信息:'||i.userid||'-------'||i.username);end loop;commit;end;》2: 创建存储过程create or replace procedure usertestiscursor userinfo is select * from t_user;beginfor i in userinfo loopdbms_output.put_line('用户信息:'||i.userid||'-------'||i.username);end loop;end;》3: 调用存储过程exec usertest;call usertest();beginusertest;end;》4: 存储过程修改数据create or replace procedure usertest(v_name varchar2)isbeginupdate t_user set username=v_name where userid=1;if v_name is null then raisecommit;exceptionwhen others then rollback;end;exec usertest('zhangsan');》5: 过程中的参数--在过程中,in修饰的参数,不允许在过程中给它赋值create or replace procedure usertest(v_name in varchar2,v_pwd out varchar2,v_show in out varchar2)isv_hello varchar2(50);begin-- v_name := 'name';v_pwd := 'pwd';v_show := 'show';v_hello := 'hello';dbms_output.put_line('信息:'||v_name||'-------'||v_pwd||'-------'||v_show||'-------'||v_hello);end;declarevp varchar2(50);vs varchar2(50);beginvs := 'cccccc';usertest('aaaaaaa',vp,vs);end;》5: 存储过程的语法create or replace procedure 过程的名字(参数1 in/out 没有长度的类型,参数2 in/out 没有长度的类型) is过程中需要用的参数名 可以指定长度的类型;begin过程的内容end;》6: 变量的类型的另外一种写法--in传递的参数,长度由外部控制--out传递的参数,长度由内部控制create or replace procedure usertest(v_name in t_user.username%type,v_num in t_user.userid%type)isv_hello t_user.username%type;beginv_hello := 'hello';dbms_output.put_line('信息:'||v_name||'-------'||v_num||'-------'||v_hello);end;declarevp varchar2(50);vs number;beginvs :=11111111111111111111;usertest('aaaaaaa',vs);end;》7: 定义外部变量var vnum number;var vid number;var vname varchar2(50);exec :vnum:=23;exec :vid:=4;exec :vname:='wangwu';exec userinfo(:vid,:vname,:vnum);create or replace procedure userinfo(vid t_user.userid%type,vname t_user.username%type,vnum out t_user.userid%type)isbeginvnum :=vid;dbms_output.put_line('信息:'||vid||'-------'||vname||'--------'||vnum);end;》 8: 创建函数create or replace function funuserreturn varchar2 isv_id number(8);uname t_user.username%type;beginv_id := 3;select username into uname from t_user where userid=v_id;return uname;end;declarevname varchar2(50);beginvname :=funuser;dbms_output.put_line('vname:'||vname);end;call funuser() into :vname;print vname;》 9: 创建包的规范create or replace package user_pkgisprocedure userselect(v_id t_user.userid%type,v_name t_user.username%type);function getname return varchar2;end;》10: 创建包的内容create or replace package body user_pkgisprocedure userselect(v_id t_user.userid%type,v_name t_user.username%type)isvn varchar2(50);beginupdate t_user set username=v_name where userid=v_id;commit;dbms_output.put_line('v_name:'||v_name);end;function getname return varchar2isvname varchar2(50);beginselect username into vname from t_user where userid=3;return vname;end;end;----exec 为调用存储过程exec user_pkg.userselect(3,'lisi');call user_pkg.getname() into :vname;print vname;※ 11: 创建视图create or replace view empdeptasselect e.empno,e.ename,e.job,e.mgr,e.sal,e.hiredate,e.comm,d.dname,d.locfrom emp e,dept dwhere e.deptno=d.deptnowith read only (这为把值设为只读);update empdept set ename='world' where empno=7369;create or replace view deptviewasselect * from emp where deptno=20with check option;update deptview set ename='world' where empno=7369;update emp set deptno=10 where empno=7369;》 12 : 创建数据库链create database link mylinkconnect to tt identified by ttusing '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = jiahua)))';select * fromcompany@mylink;》13: 创建触发器--当dept表(deptno=10)的loc的deptno改为BJ的时候,修改相关的emp表的ename=BJcreate or replace trigger updateempafter update of loc on dept for each rowbeginupdate emp set ename='BJ' where deptno=10;end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
视图:是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表,Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。 视图是存储在数据字典里的一条select语句。通过创建视图可以提取数据的逻辑上的集合或组合。 视图的优点: 1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。 2.用户通过简单的查询可以从复杂查询中得到结果。 3.维护数据的独立性,试图可从多个表检索数据。 4.对于相同的数据可产生不同的视图。 视图分为简单视图和复杂视图: 1、简单视图只从单表里获取数据,复杂视图从多表; 2、简单视图不包含函数和数据组,复杂视图包含; 3、简单视图可以实现DML操作,复杂视图不可以。 语法结构:创建视图 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] 语法解析: OR REPLACE :若所创建的试图已经存在,则替换旧视图; FORCE:不管基表是否存在ORACLE都会自动创建该视图(即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用); NOFORCE :如果基表不存在,无法创建视图,该项是默认选项(只有基表都存在ORACLE才会创建该视图)。 alias:为视图产生的列定义的别名; subquery :一条完整的SELECT语句,可以在该语句中定义别名; WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束; WITH READ ONLY :默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。 案例3:基于EMP表和DEPT表创建视图 代码演示:视图 SQL> CREATE OR REPLACE VIEW EMPDETAIL 2 AS 3 SELECT EMPNO,ENAME,JOB,HIREDATE,EMP.DEPTNO,DNAME 4 FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO 5 WITH READ ONLY 6 / VIEW CREATED SQL> SELECT * FROM EMPDETAIL; ① EMPNO ENAME JOB HIREDATE DEPTNO DNAME 7369 SMITH CLERK 17-12月-80 20 RESEARCH 7499 ALLEN SALESMAN 20-2月 -81 30 SALES 7521 WARD SALESMAN 22-2月 -81 30 SALES 7566 JONES MANAGER 02-4月 -81 20 RESEARCH 7654 MARTIN SALESMAN 28-9月 -81 30 SALES 7698 BLAKE MANAGER 01-5月 -81 30 SALES 7782 CLARK MANAGER 09-6月 -81 10 ACCOUNTING 7788 SCOTT ANALYST 19-4月 -87 20 RESEARCH 7839 KING PRESIDENT 17-11月-81 10 ACCOUNTING 7844 TURNER SALESMAN 08-9月 -81 30 SALES 7876 ADAMS CLERK 23-5月 -87 20 RESEARCH 7900 JAMES CLERK 03-12月-81 30 SALES 7902 FORD ANALYST 03-12月-81 20 RESEARCH 7934
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值