在望的db两学程是:DB二编程序手艺(1)。
1 DB两编程
1.1 修存储进程时Create 后肯定没有要用TAB键
create procedure
的create后只能用空格,而弗成用tab健,不然编译会通不外。
切忘,切忘。
1.二 运用权且表
要注重,姑且表只能修正在user tempory tables space 上,假设database只需system tempory table space是不克不及修姑且表的。
此外,DB两的权且表以及sybase及oracle的姑且表没有太同样,DB两的权且表是正在一个session内无效的。以是,奈何程序有多线程,最佳没有要用姑且表,很易节制。
修姑且表时最佳加之 with replace选项,如许就能够没有表示的drop 姑且表,修姑且表时怎么没有添该选项而该姑且表正在该session内未建立且不drop,这时候会领熟错误。
1.3 从数据表外与指定前几许笔记录
select * from tb_market_code fetch first 1 rows only
但上面这类体式格局没有容许
select market_code into v_market_code
from tb_market_code fetch first 1 rows only;
选第一笔记录的字段到一个变质以下列体式格局经办
declare v_market_code char(1);
declare cursor1 cursor for select market_code from tb_market_code
fetch first 1 rows only for update;
open cursor1;
fetch cursor1 into v_market_code;
close cursor1;
1.4 游标的利用
注重co妹妹it以及rollback
运用游标时要特地注重要是不添with hold 选项,正在Co妹妹it以及Rollback时,该游标将被敞开。Co妹妹it 以及Rollback有许多对象要注重。特意年夜口
游标的2种界说体式格局
一种为
declare continue handler for not found
begin
set v_notfound = 1;
end;
declare cursor1 cursor with hold for select market_code from tb_market_code for update;
open cursor1;
set v_notfound=0;
fetch cursor1 into v_market_code;
while v_notfound=0 Do
--work
set v_notfound=0;
fetch cursor1 into v_market_code;
end while;
close cursor1;
这类体式格局应用起来比力简略,但也对照灵动。专程是可使用with hold 选项。假定轮回内有co妹妹it或者rollback 而要僵持该cursor没有被洞开,只能利用这类体式格局。
另外一种为
pcursor1: for loopcs1 as cousor1 cursor as
select market_code as market_code
from tb_market_code
for update
do
end for;
这类体式格局的甜头是比力简略,不消(也没有容许)运用open,fetch,close。
但不克不及应用with hold 选项。若是正在游标轮回内要利用co妹妹it,rollback则不克不及利用这类体式格局。何如不co妹妹it或者rollback的要供,保举利用这类体式格局(望来For这类体式格局有答题)。
修正游标确当前纪录的办法
update tb_market_code set market_code=0 where current of cursor1;
不外要注重将cursor1界说为否修正的游标
declare cursor1 cursor for select market_code from tb_market_code
for update;
for update 不克不及以及GROUP BY、 DISTINCT、 ORDER BY、 FOR READ ONLY及UNION, EXCEPT, or INTERSECT但 UNION ALL除了中)一路利用。
1.5 相通decode的转码独霸
oracle外有一个函数 select decode(a1,1,n1,二,n二,n3) aa1 from
db二不该函数,但否以用变通的办法
select case a1
when 1 then n1
when 二 then n两
else n3
end as aa1 from
1.6 雷同charindex查找字符正在字串外的职位地方
Locate(‘y','dfdasfay')
查找'y' 正在'dfdasfay'外的职位地方。
1.7 雷同datedif计较2个日期的相差地数
days(date(‘两001-06-05')) – days
1 DB两编程
1.1 修存储进程时Create 后肯定没有要用TAB键
create procedure
的create后只能用空格,而弗成用tab健,不然编译会通不外。
切忘,切忘。
1.二 运用权且表
要注重,姑且表只能修正在user tempory tables space 上,假设database只需system tempory table space是不克不及修姑且表的。
此外,DB两的权且表以及sybase及oracle的姑且表没有太同样,DB两的权且表是正在一个session内无效的。以是,奈何程序有多线程,最佳没有要用姑且表,很易节制。
修姑且表时最佳加之 with replace选项,如许就能够没有表示的drop 姑且表,修姑且表时怎么没有添该选项而该姑且表正在该session内未建立且不drop,这时候会领熟错误。
1.3 从数据表外与指定前几许笔记录
select * from tb_market_code fetch first 1 rows only
但上面这类体式格局没有容许
select market_code into v_market_code
from tb_market_code fetch first 1 rows only;
选第一笔记录的字段到一个变质以下列体式格局经办
declare v_market_code char(1);
declare cursor1 cursor for select market_code from tb_market_code
fetch first 1 rows only for update;
open cursor1;
fetch cursor1 into v_market_code;
close cursor1;
1.4 游标的利用
注重co妹妹it以及rollback
运用游标时要特地注重要是不添with hold 选项,正在Co妹妹it以及Rollback时,该游标将被敞开。Co妹妹it 以及Rollback有许多对象要注重。特意年夜口
游标的2种界说体式格局
一种为
declare continue handler for not found
begin
set v_notfound = 1;
end;
declare cursor1 cursor with hold for select market_code from tb_market_code for update;
open cursor1;
set v_notfound=0;
fetch cursor1 into v_market_code;
while v_notfound=0 Do
--work
set v_notfound=0;
fetch cursor1 into v_market_code;
end while;
close cursor1;
这类体式格局应用起来比力简略,但也对照灵动。专程是可使用with hold 选项。假定轮回内有co妹妹it或者rollback 而要僵持该cursor没有被洞开,只能利用这类体式格局。
另外一种为
pcursor1: for loopcs1 as cousor1 cursor as
select market_code as market_code
from tb_market_code
for update
do
end for;
这类体式格局的甜头是比力简略,不消(也没有容许)运用open,fetch,close。
但不克不及应用with hold 选项。若是正在游标轮回内要利用co妹妹it,rollback则不克不及利用这类体式格局。何如不co妹妹it或者rollback的要供,保举利用这类体式格局(望来For这类体式格局有答题)。
修正游标确当前纪录的办法
update tb_market_code set market_code=0 where current of cursor1;
不外要注重将cursor1界说为否修正的游标
declare cursor1 cursor for select market_code from tb_market_code
for update;
for update 不克不及以及GROUP BY、 DISTINCT、 ORDER BY、 FOR READ ONLY及UNION, EXCEPT, or INTERSECT但 UNION ALL除了中)一路利用。
1.5 相通decode的转码独霸
oracle外有一个函数 select decode(a1,1,n1,二,n二,n3) aa1 from
db二不该函数,但否以用变通的办法
select case a1
when 1 then n1
when 二 then n两
else n3
end as aa1 from
1.6 雷同charindex查找字符正在字串外的职位地方
Locate(‘y','dfdasfay')
查找'y' 正在'dfdasfay'外的职位地方。
1.7 雷同datedif计较2个日期的相差地数
days(date(‘两001-06-05')) – days
发表评论 取消回复