⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 script_74.txt

📁 orale培训教材包括了所有的sql说明和实例
💻 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 + -