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

来源:互联网 发布:手机淘宝店铺红包链接 编辑:程序博客网 时间:2024/04/30 06:34

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 kfrom empwhere 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();   
0 0
原创粉丝点击