亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Oracle Class6-2. PL/SQL 簡介(數據類型,邏輯比

系統 1759 0

------------------------2013-5-17------------------------
set serveroutput on;
-- Oracle PL/SQL 塊
-- 聲明部分
declare
lv_Age_num number := 12;
lv_Name_char varchar2(8) default 'AZhu';???? --設置默認值--
lv_Sex_char constant varchar2(3) := '男';
-- 執行部分
begin
? dbms_output.put_line(lv_Age_num);
? dbms_output.put_line(lv_Name_char);
? dbms_output.put_line(lv_Sex_char);
? dbms_output.put_line('==========');
? lv_Age_num := 18;
? lv_Name_char := 'ANiu';
? dbms_output.put_line(lv_Age_num);
? dbms_output.put_line(lv_Name_char);
end;

-- Oracle PL/SQL 塊(if then 條件判斷)

-- Oracle PL/SQL 塊(case 分支判斷)
? case lv_Age_num
? when 10 then
??? dbms_output.put_line(lv_Name_char || '等于10');
? when 18 then
??? dbms_output.put_line(lv_Name_char || '大于10');
? else
??? dbms_output.put_line(lv_Name_char || '小于10');
? end case;

? case
? when lv_Age_num = 10 then
??? dbms_output.put_line(lv_Name_char || '等于10');
? when lv_Age_num > 10 then
??? dbms_output.put_line(lv_Name_char || '大于10');
? else
??? dbms_output.put_line(lv_Name_char || '小于10');
? end case;

--創建測試表
create table c6(
a int primary key,
b varchar2(10) unique
)

desc c6;

insert into c6 values(1,'Niu1');

select * from c6;

commit;

--批量添加
-- While
declare
lv_A_num number := 2;
begin
? while lv_A_num < 5
? loop
??? insert into c6
??? values
??? (lv_A_num, 'Niu' || to_char(lv_A_num));
??? lv_A_num := lv_A_num + 1;
? end loop;
? -- 提交
? commit;
end;

-- For
begin
? for i in reverse 11..12???? --如果加了reverse,那么表示數字從12,11倒序過來了。--
? loop
??? insert into c6
??? values
??? (i, 'Niu' || to_char(i));
? end loop;
? -- 提交
? commit;
end;

--loop? exit when方式--
declare
i number := 13;
begin
? loop
??? exit when i = 14;
??? insert into c6
??? values
??? (i, 'Niu' || to_char(i));
??? i := i +1;????????????????? --遞增算法--
? end loop;
? -- 提交
? commit;
end;

--截斷表
truncate table c6;


##過程##
declare
lv_a int;????????????? --直接寫類型,也可以引用表或視圖類型--
lv_b varchar2(10);
begin
? select a,b into lv_a,lv_b from c6 where a = 9;
? dbms_output.put_line('lv_a:' || lv_a);
? dbms_output.put_line('lv_b:' || lv_b);
end;

--record方式--
declare
type lvv is record(
lv_a int,
lv_b varchar2(10)
);
lv lvv;
begin
? select a,b into lv from c6 where a = 8;???? --數據封裝的值其實也是一一對應的--
? dbms_output.put_line('lv_a:' || lv.lv_a);
? dbms_output.put_line('lv_b:' || lv.lv_b);
end;


--record方式+cursor游標方式--
declare
type lvv is record(
lv_a int,
lv_b varchar2(10)
);
lv lvv;
cursor cur? is select a,b from c6 where a = 7;
begin
? open cur;
? fetch cur into lv;
? dbms_output.put_line('lv_a:' || lv.lv_a);
? dbms_output.put_line('lv_b:' || lv.lv_b);
? close cur;
end;

##存儲過程##
--record方式+cursor游標方式--
create or replace procedure mypro
as
--declare
type lvv is record(
lv_a int,
lv_b varchar2(10)
);
lv lvv;
cursor cur? is select a,b from c6 where a = 7;
begin
? open cur;
? fetch cur into lv;
? dbms_output.put_line('lv_a:' || lv.lv_a);
? dbms_output.put_line('lv_b:' || lv.lv_b);
? close cur;
end;

#調用#
begin
mypro;
end;


--cursor + record + while--
declare
type lvv is record(
lv_a int,
lv_b varchar2(10)
);
lv lvv;
cursor cur? is select a,b from c6 where a > 7;? --游標帶參數方式,cursor cur (p_a int)? is select a,b from c6 where a > p_a;
begin
? open cur;???????????????????????????????????????????? --游標帶參數方式,open cur(5);
? fetch cur into lv;
? while cur%found
? loop
? dbms_output.put_line('lv_a:' || lv.lv_a);
? dbms_output.put_line('lv_b:' || lv.lv_b);
? fetch cur into lv;?? --提取下一個
? end loop;
? close cur;
end;


--cursor + record + while--
declare
cursor cur? is select a,b from c6;
begin
? -- 以下操作全部自動
? -- 打開游標
? -- 提取游標
? -- 關閉游標
? for lv in cur
? loop
? dbms_output.put_line('lv_a:' || lv.a);
? dbms_output.put_line('lv_b:' || lv.b);
? end loop;
end;


begin
? -- 以下操作全部自動
? -- 打開游標
? -- 提取游標
? -- 關閉游標
? for lv in (select a,b from c6)???????????? --直接寫SQL語句--
? loop
? dbms_output.put_line('lv_a:' || lv.a);
? dbms_output.put_line('lv_b:' || lv.b);
? end loop;
end;

###62.sql###
declare
-- 變量名? 類型? 默認值
name varchar2(8) default 'Aniu';
sex nvarchar2(2) := '男';
-- 常量,定義關鍵字:constant
Pi constant number(9,8) := 3.14159265;
-- 執行
begin
? dbms_output.put_line(Pi);
? -- print
? dbms_output.put_line(name);
? dbms_output.put_line(sex);
?
? --Pi := 4;? --會報錯,常量不能修改值。
? name := 'AZhu';
? --dbms_output.put_line(Pi);
? dbms_output.put_line(name);
-- 異常處理
-- exception
end;


-- 條件判斷 IF
-- 分支判斷 CASE(選擇器,準確值),(表達式,范圍),(比較賦予值)

-- 循環控制 while 條件? loop?? ...? end loop;??????????? -- while與loop之間都是沒有符號的!!
??????????? for i in 5 .. 10? loop ... end loop;?? for i in reverse 11 .. 15?? -- i計數器for遞增,不需要手動修改,否則會報錯。
??????????? loop? exit when 條件;? end loop;

##case第三個情況##
declare
type lvv is record(
lv_a int,
lv_b varchar2(10)
);
lv lvv;
cursor cur? is select a,b from c6;
lv_txt varchar2(18);
begin
? open cur;
? loop
??? fetch cur into lv;
??? exit when cur%notfound;
??? lv_txt := case lv.lv_a???????? --設置的字段,將值給lv_txt變量--
??? when '1' then '排第一個'
??? when '2' then '排第二個'
??? when '3' then '排第三個'
??? when '4' then '排第四個'
??? else? '其他'
??? end;
??? dbms_output.put_line('lv_txt:' || lv_txt);
? end loop;
? close cur;
end;


begin
? for i in 1..3
? loop
??? dbms_output.put_line(i);
??? --i := i + 1;??????????????? -- PLS-00363: 表達式 'I' 不能用作賦值目標
? end loop;
end;

-- 語句跳轉
?begin
? dbms_output.put_line('1');
? dbms_output.put_line('2');
? goto test_row;
? dbms_output.put_line('3');
? dbms_output.put_line('4');
? <<test_row>>
? dbms_output.put_line('5');
?end;

-- 非法"跳轉"
-- 注意:不可跳轉至if/while/for/loop等子句
begin
? dbms_output.put_line('1');
? goto test_row;
? dbms_output.put_line('3');
? if 1 = 1 then
??? dbms_output.put_line('4');
??? <<test_row>>
? end if;
? dbms_output.put_line('5');
end;

-- 注意:不可從異常處理塊中跳轉回到PL/SQL塊的執行部分
declare
? i int;
begin
? i := i / 0;
? <<test_row>>
exception
? when zero_divide then
??? go_to test_row;
end;

--創建表--
create table c7
(
a int primary key
);

insert into c7 values (1);

select * from c7;

begin
? insert into c7 values (1);
exception
? when dup_val_on_index then
??? dbms_output.put_line('錯誤: 添加重復值!');
end;


-- 捕獲自定義異常
-- (1)聲明 exception
-- (2)綁定 pragma exception_init(exception, code)
-- (3)捕獲
declare
-- 聲明異常
Invalid_Number exception;
-- 綁定
pragma exception_init(Invalid_Number, -01722);
begin
? insert into c7 values ('ABC');
exception
? -- 捕獲異常
? when Invalid_Number then
??? dbms_output.put_line('錯誤: 非法數字值!');
end;


begin
? insert into c7 values ('ABC');
exception
? -- 捕獲異常
? when others then??????????????????????? -- 其他異常
??? dbms_output.put_line(sqlcode);??????? -- 異常編號
??? --dbms_output.put_line(sqlerrmsg);??? -- 報錯:PLS-00201: 必須說明標識符 'SQLERRMSG'
??? dbms_output.put_line(sqlerrm);??????? -- sqlerrm就對了。
??? dbms_output.put_line('錯誤: 未知!');
end;


while cur_titles%found loop??? end loop;

loop? exit when cur_titles%notfound??? end loop;

select trunc(sysdate) from dual;
----------
17-5月 -13


declare
ex_title_test exception;
pragma exception_init( ex_title_test, -01476);
lv_test_num number(4);
lv_errmsg_txt varchar2(80) := 'No any error!';
lv_errnum_txt varchar2(10) := '911';
begin
? lv_test_num := 12 / 0;
? dbms_output.put_line ( lv_errmsg_txt );
? dbms_output.put_line ( lv_errnum_txt );
? exception
? when ex_title_test then dbms_output.put_line ( '除數不可以為零!' );
? lv_errmsg_txt := substr(sqlerrm, 1 , 80);
? lv_errnum_txt := sqlcode;
? dbms_output.put_line ( lv_errmsg_txt );
? dbms_output.put_line ( lv_errnum_txt );
end;

select 60 / 0 from dual;
ORA-01476: 除數為 0

select sqlcode from dual;? -- 執行出錯
select sqlerrm from dual;? -- 執行出錯

Oracle Class6-2. PL/SQL 簡介(數據類型,邏輯比較,控制結構,錯誤處理)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久精品国产麻豆不卡 | 干夜夜 | 久久精品视频网 | 麻豆首页 | 91久久国产成人免费观看资源 | 亚洲乱码在线播放 | 亚洲综合中文网 | 久草视频网址 | 激情久久久久久久久久久 | 色婷婷亚洲 | 亚洲综合网在线观看 | 国产欧美一区二区三区视频 | 成 人 黄 色 大 片 | 亚洲最大免费视频网 | 中文字幕在线日韩 | 久久这里只有精品免费的 | 久久在线免费观看 | 99精品国产久热在线观看66 | 丁香久久| 免费看欧美一级特黄a大片一 | 国产在线精品一区免费香蕉 | 国产日韩欧美一区二区三区综合 | 日韩精品一区二区在线观看 | 爱爱网站在线观看免费 | 国产毛片女人18水多 | 亚洲欧美久久精品1区2区 | 欧美大胆一级视频 | 99re5在线精品视频热线 | 九九热国产 | 色18美女社区 | 国产日韩欧美精品一区 | 精品视频一区二区三三区四区 | 亚洲国产高清视频 | 高清国产一区二区 | 伊人久久亚洲综合 | 日本一级毛一级毛片短视频 | 4虎 影视 免费| 久久99国产亚洲精品观看 | 天天插天天插天天插 | 欧美日韩在线观看视频 | 四虎国产|