oracle的if语句采用decode函数。
10年积累的成都做网站、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有丰满免费网站建设让你可以放心的选择与我们合作。
DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
表示如果value 等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。
Oracle数据库是对标准sql语言的过程化扩展,因此产生了pl/sql语言。其中的if语句大量使用使得程序模块化的功能方便实用。现在要讨论的是if语句的基本使用方法。
连接数据库
请输入用户名: scott/123456
设置环境变量
SQL set serveroutput on
定义两个字符串变量,然后赋值,接着使用if……then语句比较两个字符串变量的长度,并输出比较结果。
declare
a varchar(10);
b varchar(10);
begin
a:='beijing';
b:='guangdong';
if length(a)length(b)
then dbms_output.put_line('ab');
end if;
end;
过if……then……else语句实现只有年龄大于等于56岁,才可以申请退休,否则程序会提示不可以申请退休。
declare
a number(10);
begin
a:=x;
if a=56
then dbms_output.put_line('可以申请退休');
else dbms_output.put_line('不可以申请退休');
end if;
end;
制定一个月份数值,然后使用if……then……elsif语句判断它所属的季节,并输出季节信息。
declare
mon number(10);
begin
mon:=x;
if mon=3 or mon=4 or mon=5
then dbms_output.put_line('春节');
elsif mon=6 or mon=7 or mon=8 then dbms_output.put_line('夏季');
elsif mon=9 or mon=10 or mon=11 then dbms_output.put_line('秋季');
elsif mon=12 or mon=1 or mon=2 then dbms_output.put_line('冬季');
end if;
end;
制定一个季度数值,然后使用case语句判断它所包含的月份信息并输出。
declare
ss number(10);
begin
ss:=x;
case
when ss=1 then dbms_output.put_line('包含月份3,4,5');
when ss=2 then dbms_output.put_line('包含月份6,7,8');
when ss=3 then dbms_output.put_line('包含月份9,10,11');
when ss=4 then dbms_output.put_line('包含月份12,1,2');
end case;
end;
SELECT a.id,
a.name,
a.dept,
CASE
WHEN (SELECT COUNT (1) cnt
FROM b
WHERE a.name = b.name AND b.TYPE '03') 0
THEN
ELSE
1
END
flag
FROM a
不过还需要考虑一个问题就是:如果B表中找不到记录时,flag如何赋值。
上面这个sql针对这个情况会赋值1
这个属于oracle时间函数的用法
在oracle里,日期格式是一种特殊的东西
这里有一个日期转换函数
select to_char(日期,'yyyy-mm-dd hh24:mi:ss') from tablename;
这里的to_char就是将日期型转换成字符型的一个函数,转换成的格式就是
2010-08-23 17:51:20
当然你可以将这个日期转换成其他,如:
select to_char(日期,'yyyy-mm-dd') from tablename;
查出来的结果2010-08-23
所以你要根据这个日期来查东西就可以这么用
select * from tablename where to_char(日期,'yyyymmdd')between '20100801' and '20100823'
这个就是查日期8月1日到8月23日的数据
select * from tablename where to_char(日期,'yyyymmdd') = '20100801'
这个就是查8月1日的数据
其他不懂的你再问吧
-------补充------
你把你写的东西粘贴一下,也好帮你分析啊
你后边的" + model.Csrq + "参数传进来的是什么东西?
---------补充2-------
'yyyy-mm-dd 24hi:mi:ss'
这个地方错了,应改成
'yyyy-mm-dd hh24:mi:ss'
不是24hi
如下参考:
1.从tblTest表中获取itemcode='Item001'的记录行,然后使用where的等式(=)条件,select*fromtblTestwhereitemcode='Item001'如下图。
2. 如果从tblTest表中获得itemnum 50的记录行,则可以使用where greater than()条件。也可以使用大于或等于(=),select * from tblTest where itemnum 50,如下图。
3.从tblTest表中获取itemnum 50的记录行,您可以使用where的小于()条件。小于条件也可以使用小于或等于(=),select * from tblTest where itemnum 50如下图。
4.从tblTest表中获取itemnum不等于itemprice的记录行,可以使用where's not equal to (!等于或小于如下图。
5.从tblTest表中获取包含itemname中单词“item”的记录行,然后可以使用where的fuzzy(%)条件。左边的百分号表示左边可以是任何值,右边的百分号表示右边可以匹配任何值,百分号可以是两边的,如下图。
oracle判断为空是用is
null不是=null;
在oracle中=null一直都是返回false的。
另外最好加上exception判断:
IF
:new.s_ID
IS
NULL
THEN
BEGIN
SELECT
c_id
into
:new.s_ID
from
classs
where
c_sid=:NEW.s_cid;
EXCEPTION
WHEN
no_data_found
THEN
SELECT
INTO
:new.s_ID
FROM
dual;
--或者其他操作
END;
END
IF;
当在classs表中没有找到对应的记录时不至于出错,看你要怎么设计咯。
是存储过程里面的 IF/ELSE ? 还是简单的 DECODE ?
SQL DECLARE
2 testvalue INT;
3 BEGIN
4 testvalue := 100;
5
6 IF testvalue 100 THEN
7 dbms_output.put_line( '100+' );
8 ELSIF testvalue = 100 THEN
9 dbms_output.put_line( '100' );
10 ELSE
11 dbms_output.put_line( '100-' );
12 END IF;
13
14 END;
15 /
100
PL/SQL procedure successfully completed.
SQL SELECT
2 DECODE(GROUPING(sale_item), 1, 'ALL', sale_item) AS iten,
3 SUM(sale_money) AS money
4 FROM
5 sale_report
6 GROUP BY
7 ROLLUP(sale_item);
ITEN MONEY
------ ----------
A 733285
B 2382
C 5738
ALL 741405