Oracle入门语法

[size=large][/size]创建表空间:create tablespace 表空间名 filename '文件名';
创建用户:create user 用户名 identified by 密码;
赋予用户权限:grant connect to 用户名; grant all on 表名 to 用户名;
消除用户权限:revoke


同义词也可以说是表的别名,它提供了另有一种表安全性,同时也简化了SQL语句。
创建私有同义词:create synonym aa for 表名; select * from aa;
这是私有的同义词,它只能被创建它的用户使用。
创建公共同义词:create public synonym bb for 表名;
这是公共的同义词,所有用户都能使用。
删除同义词drop (public) synonym 同义词名;


视图:同样也提供了另一种级别的表安全性,简化了SQL语句,隐藏了表结构。
创建视图:create view v_name as select ename as"xx" from scott.emp;
select * from v_name;
删除视图:drop view v_name;


创建单列索引:create index index_name on 表名(字段名);
创建复合索引:create index index_name on 表名(字段名,字段名);
索引一般是与rowid相关联,它独立于表的物理结构。
我们一般在低基数即重复率较高,以及查询在十万条以上是才创建索引,这样有利于提高查询效率,但由于oracle会自动维护索引导致增删改的效率会降低。


PL/SQL编程
PL/SQL是过程语言(procedural language)与结构化查询语言(SQL)结合而成的编程语言。

块:declare
变量名 变量类型(长度);
begin
.......
end;

例子:declare
v_ename scott.emp.ename%type;
begin
select e2.ename into v_ename from scott.emp e,scott.emp e2 where e.mgr=e2.empno and e.ename='KING';
dbms_output.put_line('上司是:'||v_ename);
exception
when no_data_found then
dbms_output.put_line('这人是老大');
end;

--块可以直接运行


过程:create or replace procedure pro_name[变量 变量类型] is
[变量 变量类型(长度)];
.......
begin
.....
[exception
when no_data_found then
......
]
end;

例子: create or replace procedure pro_name(v_empno number) is
v_ename scott.emp.ename%type;
v_sal scott.emp.sal%type;
begin
select ename,sal into v_ename,v_sal from scott.emp where empno=v_empno;
dbms_output.put_line('姓名:'||v_ename||'工资:'||v_sal);
end;

调用过程:
exec pro_name[7788];


函数:create or replace Function fun_name(变量 类型) return 返回值类型 is
变量2 变量类型(长度);
begin
......
return 变量2;
end;

例子:create or replace Function fun_name(v_empno number)return varchar is
v_ename scott.emp.ename%type;
begin
select ename into v_ename from scott.emp where empno=v_empno;
return v_ename;
end;

调用函数:var aaa varchar2(10);
call fun_name(7369) into aaa;
--函数我们一般是给过程去调用的;
例子: create or replace Function fun_pro(v_empno number) return varchar is
v_ename scott.emp.ename%type;
begin
select ename into v_ename from scott.emp where empno=v_empno;
return v_ename;
end;


create or replace procedure pro_p(v_empno number) is
v_ename scott.emp.ename%type;
begin
v_ename:=fun_pro(v_empno);
dbms_output.put_line('姓名:'||v_ename);
end;


包:用来给过程和函数分类。
包体:是对包的实现,先要创建包,再能创建包体。 包体的名字必须与包的名字一样。
例子:create or replace package package_name is
procedure pro_name(v_empno number);
Function fun_name(v_empno number) return varchar;
end;

create or replace package body package_name is
procedure pro_name(v_empno number) is
v_ename scott.emp.ename%type;
begin
select ename into v_ename from scott.emp where empno=v_empno;
dbms_output.put_line('姓名:'||v_ename);
end;
Function fun_name(v_empno number) return varchar is
v_ename scott.emp.ename%type;
begin
select ename into v_ename from scott.emp where empno=v_empno;
return v_ename;
end;
end;

调用包中的过程:exec package_name.pro_name(7369);
调用包中的函数: var bbb varchar2(10); call package_name.fun_name(7369) into bbb;


PL/SQL中的数据类型:
1》标量类型
2》复合类型
3》嵌套表
4》varray


1》标量类型
定义一个变长字符串
xxx varchar2(10);
定义一个小数,范围-9999.99-9999.99
xxx number(6,2);
定义一个小数并给一个初始值8.8;
xxx number(6,2):=8.8;
定义一个日期类型的数据
xxx date;
定义一个布尔变量,不能为空,默认值为true;
xxx boolean not null default true;
定义一个常量只能赋值一次,不可被修改
xxx constant number(5):=99;


2》复合类型
PL/SQL记录:create or replace package package_record is
type myrecor_type is record(
v_ename scott.emp.ename%type,
v_sal scott.emp.sal%type,
v_deptno scott.emp.deptno%type

);
end;--这里是创建了一个record的变量类型 myrecor_type


create or replace procedure pro_name(v_empno number) is
v_myrecord package_record. myrecor_type;--这里是对上面的使用(相当于java中的类与对象)
begin
select ename,sal,deptno into v_myrecord.v_ename,v_myrecord.v_sal,v_myrecord.v_deptno from
scott.emp where empno=v_empno;
dbms_output.put_line('姓名:'||v_myrecord.v_ename||'工资:'||v_myrecord.v_sal||'部门:'||v_myrecord.v_deptno);
end;


PL/SQL记录2:create or replace procedure pro_name(v_empno number) is
type v_record is record(
v_ename scott.emp.ename%type,
v_sal scott.emp.sal%type,
v_deptno scott.emp.deptno%type

);
myrecord v_record;
begin
select ename,sal,deptno into myrecord.v_ename,myrecord.v_sal,myrecord.v_deptno from scott.emp where empno=v_empno;
dbms_output.put_line('姓名:'||myrecord.v_ename||'工资:'||myrecord.v_sal||'部门:'||myrecord.v_deptno);
end;


3》参照类型--游标
create or replace package package_name is
type package_cursor is ref cursor;--定义一个游标类型
end;

create or replace procedure pro_name(v_deptno number) is
--type package_cursor is ref cursor;
mycursor package_cursor;--定义一个游标类型的‘对象’
v_ename scott.emp.ename%type;
v_sal scott.emp.sal%type;
v_empno scott.emp.empno%type;
begin
open mycursor for select ename,sal,empno from scott.emp where deptno=v_deptno;
Loop
fetch mycursor into v_ename,v_sal,v_empno;
exit when mycursor%notfound;
dbms_output.put_line('姓名:'||v_ename||'工资:'||v_sal||'员工编号:'||v_empno);
end Loop;
end;

在过程中调用过程:
例子:create or replace procedure pro_swap(num1 in out number,num2 in out number) is
tep number(10):=11;
begin
tep:=num1;
num1:=num2;
num2:=tep;
end;

create or replace procedure pro_1 is
num1 number(10):=100;
num2 number(10):=200;
begin
pro_swap(num1,num2);
dbms_output.put_line(num1||' ,'||num2);
end;

注意:这里pro_swap中的参数 要写 in out;


PL/SQL中的流程控制:
1》if 条件 then 执行语句 end if;
2》if 条件 then 执行语句 else 执行语句 end if;
3》if 条件 then 执行语句 else if 条件 then 执行语句 else 执行语句 end if;end if;

--有几个 if 就要有几个 end if;

--case语句
create or replace procedure pro_if(v_empno number) is
v_job emp.job%type;
v_sal emp.sal%type;
begin
select job,sal into v_job,v_sal from emp where empno=v_empno;
case v_job
when 'PRESIDENT' then
v_sal:=v_sal+1000;
when 'MANAGER' then
v_sal:=v_sal+500;
when 'CLERK ' then
v_sal:=v_sal+300;
when 'ANALYST ' then
v_sal:=v_sal+200;
else
null;
end case;
update emp set sal=v_sal where empno=v_empno;

end;

暂时就先写到这了。[size=medium][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值