📄 script_74.txt
字号:
---------- hellow.txt ----------
/*
* 范例名称:PL/SQL例程
* 文件名称:hellow.txt
*/
--sqlplus指令,用以使sqlplus显示dbms_output的输出
set serveroutput on
declare
--目前没有变量要定义
begin
dbms_output.put_line('hellow world');
end;
--whith comment
declare
begin
dbms_output.put_line('hellow world');
--dbms_output.put_line('how are you?');
end;
---------- 匿名_命名_sp.txt----------
/*
* 范例名称:匿名块,命名块,存储过程的区分
* 文件名称:匿名_命名_sp.txt
*/
--1 一个最简单的匿名块:第一个plsql程序:
declare
--目前没有变量要定义
begin
dbms_output.put_line('hellow world');
end;
--2 一个匿名块 调用了一个命名块(procedure hellow)
declare
procedure hellow is
begin
dbms_output.put_line('hellow world');
end;
begin
hellow();
end;
/
--/用以强制执行
--3 定义一个存储过程
create or replace
procedure hellow is
begin
dbms_output.put_line('hellow world');
end;
/
--调用一个存储过程:后面将详细讲到
call hellow();
---------- plsql优点.txt ----------
/*
* 范例名称:PL/SQL例程
* 文件名称:plsql优点.txt
*/
--对比sql和plsql语句的执行:
insert into sm_emp values
('2000000001','TOM CAT',80,'66666666');
insert into sm_emp values
('2000000002','ORACLE',90,'66666666');
ROLLBACK;
---use plsql--
BEGIN
insert into sm_emp
values('200000001','TOM CAT', 80,'66666666');
insert into sm_emp
values('200000002','ORACLE', 80,'66666666');
commit;
end;
/
--PL/SQL procedure successfully completed.
--对比sql和plsql语句的执行:可以看到sql三句返回三次,PL/SQL只返回一次信息。
---------- fun_proc.txt ----------
/*
* 范例名称:PL/SQL例程
* 文件名称:fun_proc.txt
*/
--匿名block.txt
set serveroutput on
DECLARE
num_a NUMBER := 6;
num_b NUMBER;
BEGIN
num_b := 3;
num_a := num_a / num_b;
NUM_B := 7; --不区分大小写
dbms_output.put_line(' Value of num_a ' || num_a);
dbms_output.put_line(' Value of num_b ' || num_b);
END;
------------------------函数-------------------------------------------
--匿名block中使用的客户端函数。
--注意:本例于下一例的区别 find_area1为一个客户端函数,find_area为存储于服务器端的存储函数
set serveroutput on
DECLARE
num_a NUMBER := 6;
num_b NUMBER;
--定义一个在匿名block中的函数
function find_area1
(vlength in number,vwidth in number)
--参数可定义为in.后面马上要讲到
return number
as
varea number;
begin
varea :=vlength *vwidth;
return varea;
end;
BEGIN
NUM_B := find_area1(10,num_a); --不区分大小写
dbms_output.put_line(' Value of num_a ' || num_a);
dbms_output.put_line(' Value of num_b ' || num_b);
END;
--------------------------------------注释的位置---------------------------
create or replace function
--declare
find_area2
--aa
(vlength in number,vwidth in number)
--参数可定义为in
return number
as
varea number;
begin
varea :=vlength *vwidth;
--注释
return varea;
end;
--注释可以加在多个地方---------------------------
--define a function:定义一个存储于服务器端的存储函数----------
create or replace function find_area
(vlength in number,vwidth in number)
--参数可定义为in
return number
as
varea number;
begin
varea :=vlength *vwidth;
--注释
return varea;
end;
--test the function 在sql中
select find_area (10,30)area from dual;
--在plsql中调用函数
declare
area1 number:=0;
begin
area1 := find_area(10,11);
--在plsql中直接用过程函数名调用存储过程。
dbms_output.put_line('面积 : ' || area1);
end;
--练习:
--使用find_area函数
--建立房屋表,求其面积
--房屋信息表:
create table fangwu(
name varchar2(20),
chang number(5,2), --长
kuan number(5,2),
jianzhu number(10,2), --建筑面积 == chang * kuan + 2.5
shiyong number(10,2)) ;
--shiyong :使用面积 = chang * kuan
insert into fangwu (name,chang,kuan) values('1号机房',20,5.5);
insert into fangwu (name,chang,kuan) values('2号机房',25,5.5);
insert into fangwu (name,chang,kuan) values('卧室',200,5.5);
--利用 find_area函数,更新 建筑面积,使用面积
--在select语句中使用函数
select name ,find_area(chang,kuan) 面积 from fangwu;
--函数实际应当和TABLE 和SQL一同使用.这样则可以扩张sql的基本函数.
------------------------过程-------------------------------------------
--一个匿名块 调用了一个命名块(procedure hellow)
--定义了一个一个客户端procedure:hellow
declare
procedure hellow_me is
begin
dbms_output.put_line('hellow world');
end;
begin
hellow_me();
end;
--定义了一个存储过程:求面积
create or replace procedure get_area_sub
(vlength in number,vwidth in number,
varea out number)
----参数可定义为in,out,in out
----传入长,宽求面积。
as
begin
varea :=vlength *vwidth;
end;
--在plsql中调用存储procedure
declare
a number:=0;
b number:=10;
c number:=20;
begin
get_area_sub(b,c,a);
--在plsql中直接用过程函数名调用存储过程。
--a取得输出参数的值
dbms_output.put_line('area is :' || a);
end;
/
--define a function with a out parameter
--带out 的函数
create or replace function find_area_out
(vlength in number,vwidth in number,
varea_para out number)
return number
is
varea number;
begin
varea :=vlength *vwidth;
varea_para:=vlength *vwidth;
return varea;
end;
--test the function
variable warea_out number;
--定义一个SQLPLUS变量,准备在OUT参数位置使用
select find_area_out(10,30,:warea_out) from dual;
--fun建立时不出问题,调用时出err
--ERROR 位于第 1 行:
--ORA-06572: 函数 FIND_AREA_OUT 具有输出自变量
---------- sm_procedure.txt ----------
/*
* 范例名称:存储过程
* 文件名称:sm_procedure.txt
*/
CREATE OR REPLACE PROCEDURE sm_select IS
x NUMBER(3,0);
BEGIN
x=1;
END;
--Err 在哪儿??? := 与=
CREATE or replace PROCEDURE sm_first_proc IS
greetings VARCHAR2(20);
BEGIN
greetings := 'Hello World';
dbms_output.put_line(greetings);
END sm_first_proc;
--在PL/SQL block内直接调用过程
CREATE OR REPLACE PROCEDURE CALL_proc IS
area number(10,3);
BEGIN
sm_first_proc(); --调用过程
area :=find_area (10,30); --调用函数
dbms_output.put_line('CALLED OK');
END ;
--
EXECUTE CALL_PROC();
CALL CALL_PROC();
CREATE OR REPLACE PROCEDURE sm_second_proc IS
BEGIN
SELECT * FROM sm_emp;
END;
--Err警告: 创建的过程带有编译错误对于plsql,porcedure中不可以有select语句。可以用后面讲的select into语句
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -