最近刚入职,公司用的是Oracle,只会用MySQL和热爱学习的我,开始接触Oracle了。
代码纯手敲
1、引用型变量
set serverputout on
declare
pname tb_user.name%type;
page tb_user.age%type;
begin
select name,age into pname,page from tb_user where id =2
--打印
dbms_output.put_line(pname||'的年龄是'||page);
end;
/
2、记录型变量
set serveroutput on
declare
rowdata tb_user%rowtype;
begin
select name,age into rowdata from tb_user where id=1
dbms_output.put_line(rowdata.name||'的年龄是'||rowdata.age);
end;
/
3、if语句
set serveroutput on
accept num prompt '请输入一个数字'
declare
pnum number:=#
begin
if pnum=0 then dbms_output.put_line('我输入的数字是0');
elsif pnum=1 then dbms_output_line('我输入的数字是1');
else dbms_output.put_line('我输入的数字是'||pnum);
end if;
end;
/
4、for循环
set serveroutput on
declare
num number :=1;
begin
for num in 1..10 loop
dbms_output.put_line(num);
end loop;
end;
/
5、while循环
set serveroutput on
declare
num number :=1;
begin
while num<=10 loop
dbms_output.put_line(num);
num:=num+1;
end loop;
end;
/
6、loop循环
set serveroutput on
declare
num number:=1;
begin
loop
exit when num>10;
dbms_output.put_line(num);
num:=num+1;
end loop;
end;
/
7、无参的光标(个人理解:光标是ResultSet的所有记录,需要循环遍历这个光标)set serveroutput on
declare
cursor temp is select name,age from tb_user;
pname tb_user.name%type;
page tb_user.age%type;
begin
open temp;
loop
fetch temp into pname,page;
exit when temp%notfound;
dbms_output.put_line(pname||'的年龄是'||page);
end loop;
close temp;
end;
/
8、带参的光标
set serveroutput on
declare
cursor temp(pid number) is select name,age from tb_user;
pname tb_user.name%type;
page tb_user.age%type;
begin
open temp(1);
loop
fetch temp into pname,page;
exit when temp%notfound;
dbms_output.put_line(pname||'的年龄是'||page);
end loop;
close temp;
end;
/
9、光标的应用
set serveroutput on
declare
cursor temp is select name from tb_user;
pname tb_user.name%type;
begin
open temp;
loop
fetch temp into pname;
exit when temp%notfound;
if pname='张三' then update tb_user set money=money+500; //表中叫张三的工资加500
elsif pname='李四' then update tb_user set money=money+1000;
end if;
end loop;
close temp;
commit;
dbms_output.put_line('提交完成');
end;
/
10、helloworld(第一个存储过程)
create or replace procedure sayhelloworld
as
begin
dbms_output.put_line('helloworld');
end;
11、调用存储过程
begin
sayhelloworld();
end;
12、带参的存储过程
create or replace procedure raisemoney(num in number)
as
--定义一个变量保存涨前的薪水
pmoney tb_user.money%type;
begin
select money into pmoney from tb_user where id=num;
dbms_output.put_line('涨前的工资'||pmoney);
dbms_output.put_line('涨后的工资'||(pmoney+100));
end;
13、函数create or replace function queryuser(num in number)
return number
as
--定义员工年收入
pmoney tb_user.money%type;
begin
--得到员工的月薪
select money into pmoney from tb_user where id=num;
return pmoney*12;
end;