数据库Oracle与Mysql语法对比:变量赋值

Oracle

PL/SQL程序的基本单元是块(BLOCK),块就是实现一定功能的逻辑模块。一个PL/SQL 程序由一个或多个块组成。块有固定的结构,也可以嵌套。一个块可以包括三个部分,每个部分由一个关键字标识。
块中各部分的作用解释如下:
(1) DECLARE:声明部分标志。
(2) BEGIN:可执行部分标志。
(3) EXCEPTION:异常处理部分标志。
(4) END;:程序结束标志。
在以下的训练中,将使用函数 DBMS_OUTPUT.PUT_LINE 显示输出结果。 DBMS_OUTPUT 是 Oracle 提供的包,该包有如下三个用于输出的函数,用于显示 PL/SQL
程序模块的输出信息。
第一种形式:
DBMS_OUTPUT.PUT(字符串表达式);
用于输出字符串,但不换行,括号中的参数是要输出的字符串表达式。
第二种形式:
DBMS_OUTPUT.PUT_LINE(字符串表达式);
用于输出一行字符串信息,并换行,括号中的参数是要输出的字符串表达式。
第三种形式:
DBMS_OUTPUT.NEW_LINE;
用来输出一个换行,没有参数。
调用函数时,在包名后面用一个点“.”和函数名分隔,表示隶属关系。

 SET SERVEROUTPUT ON  
 DECLARE  --声明部分标识  
 v_job  VARCHAR2(9); 
 v_count BINARY_INTEGER DEFAULT 0;  
 v_total_sal NUMBER(9,2) := 0; 
c_tax_rate  CONSTANT NUMBER(3,2) := 8.25; 
 v_valid        BOOLEAN NOT NULL := TRUE;   
BEGIN 
v_job:='MANAGER';        --在程序中赋值 
 DBMS_OUTPUT.PUT_LINE(v_job);  --输出变量 v_job 的值 
 DBMS_OUTPUT.PUT_LINE(v_count); --输出变量 v_count 的值 
DBMS_OUTPUT.PUT_LINE(v_date);  --输出变量 v_date 的值 
DBMS_OUTPUT.PUT_LINE(c_tax_rate);  --输出变量 c_tax_rate 的值     
END; 执行结果: 

Mysql

把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的方式来实现赋值。示例代码:

drop table if exists test_tbl;
create table test_tbl (name varchar(20), status int(2));
insert into test_tbl values('abc', 1),('edf', 2),('xyz', 3);

drop procedure IF EXISTS pro_test_3;
delimiter //
create procedure pro_test_3()
begin
--  方式 1
    DECLARE cnt INT DEFAULT 0;
    select count(*) into cnt from test_tbl;
    select cnt;

--  方式 2
    set @cnt = (select count(*) from test_tbl);
    select @cnt;

--  方式 3
    select count(*) into @cnt1 from test_tbl;
    select @cnt1;

--  多个列的情况下似乎只能用 into 方式
    select max(status), avg(status) into @max, @avg from test_tbl;
    select @max, @avg;
end
//
delimiter ;

call pro_test_3();

例:

求斐波那契数列的和S并输出。S=F(0)+F(1)+F(2)…+F(k),其中F(0)=0,F(1)=1,…F(n)=F(n-1)+F(n-2)(n>=2),k是emp表中工资(sal)小于3000的雇员总数(用查询语言得到)。

DELIMITER $$  
drop procedure if exists Fibonacci$$
CREATE PROCEDURE Fibonacci()  
BEGIN  
    DECLARE i INT DEFAULT 2;
    declare f int default 0;
    declare a int default 0;
    declare b int default 1;
    declare s int default 0;
    declare k int default 0;
  select count(empno) into k
from emp
where sal <3000;
select k;
    WHILE i <= k DO  
        set  f = a+b;
        set  a = b;
        set  b = f;
        set  s =s + f;
        set  i =i + 1 ;
    END WHILE;
     SELECT k,s+1 AS result; 
END$$
call Fibonacci();   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值