课外天地 李树青学习天地数据库系统原理课件 → [推荐]关于Oracle中SQL语法的部分整理资料之二


  共有19563人关注过本帖树形打印复制链接

主题:[推荐]关于Oracle中SQL语法的部分整理资料之二

帅哥哟,离线,有人找我吗?
admin
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1939 积分:26594 威望:0 精华:34 注册:2003/12/30 16:34:32
[推荐]关于Oracle中SQL语法的部分整理资料之二  发帖心情 Post By:2009/11/5 22:01:05 [只看该作者]

1 DML
1、1 insert
基本使用
insert into student ("NUMBER",name,sex,birthday,height)  values ( '000006','姚华',0,TO_DATE('12-5月 -1983','dd-Mon-
yyyy'),1.77);

select * into table1 from student

create table table1 as select * from student
drop table table1

insert into table1 select * from student(必须事先具有表结构)

1、2 update
update student set height=1.6 where sex=0

1、3 delete
delete from student where sex=1

2 存储过程
2、1 一般存储过程
create or replace procedure spgetcount as
begin
  select count(*) from student;
end spgetcount;

show errors;

ALTER TABLE "SYSTEM"."STUDENT" RENAME COLUMN "NUMBER" TO "SID"

create or replace procedure spgetcount as
rcount number;
begin
  select count(*) into rcount from student;
  DBMS_OUTPUT.PUT_LINE(rcount);
end spgetcount;

调用
set serveroutput on;
begin
   spgetcount;
end;

2、2 带有参数的存储过程
ALTER TABLE "SYSTEM"."GRADE" RENAME COLUMN "NUMBER" TO "SID"

create or replace procedure spgetavg(sname varchar2) as
avgvalue number;
begin
  select avg(grade) into avgvalue from student natural join grade where name=sname;
  DBMS_OUTPUT.PUT_LINE(avgvalue);
end spgetavg;

set serveroutput on;
begin
   spgetavg('赵怡春');
end;


create or replace procedure spgetavg(sname varchar2,result out number) as
avgvalue number;
begin
  select avg(grade) into avgvalue from student natural join grade where name=sname;
  result:=avgvalue;
end spgetavg;

set serveroutput on;
declare
   resultgrade number;
begin
   spgetavg('赵怡春',resultgrade);
   DBMS_OUTPUT.PUT_LINE(resultgrade);
end;

3 控制语句
set serveroutput on size 1000000;
declare
a number:=-2;
begin
if a<0 then
  a:=-a;
else
  a:=a;
end if;
dbms_output.put_line(a);
exception
when others then
raise_application_error(-20010,'err code : ' || sqlcode || 'desc : ' || sqlerrm);
end;


SET SERVEROUT ON
BEGIN
  DBMS_OUTPUT.PUT_LINE('打印三角形');
  FOR i IN 1..9 LOOP
    FOR j IN 1..i LOOP
      DBMS_OUTPUT.PUT('*');
    END LOOP for_j;
    DBMS_OUTPUT.NEW_LINE;
  END LOOP for_i;
END;


DECLARE
  l_num   NUMBER;
  counter NUMBER;
BEGIN
  counter:=1;
  WHILE counter <= 10
  LOOP
    l_num := ABS((DBMS_RANDOM.RANDOM MOD 100)) + 1;
    DBMS_OUTPUT.PUT_LINE(l_num);
    counter := counter + 1;
  END LOOP;
END;

4 游标
declare
   name varchar2(8);
   sex number;
   rs SYS_REFCURSOR;
begin
open rs for select name,sex from student;
loop
fetch rs into name,sex;
exit when rs%NOTFOUND;
if sex=1 then
  DBMS_OUTPUT.PUT_LINE(name || ' 男');
else
  DBMS_OUTPUT.PUT_LINE(name || ' 女');
end if;
end loop;
end;

5 函数
create or replace function getgender
(sex number)
return varchar
is
begin
declare
gender varchar2(2);
begin
if sex=1 then
  gender:='男';
else
  gender:='女';
end if;
return gender;
end;
end;

select name,getgender(sex) from student

select name 姓名,case when sex=1 then '男' else '女' end 性别 from student

[此贴子已经被作者于2010-12-11 20:12:23编辑过]

 回到顶部