輸出100以內的質數
-- 定義3個變數-- i:外迴圈,迴圈2到100的數
-- j:內迴圈,判斷從2到i-1是否能被整除
-- flag:是否是素數的標誌,執行完一次內迴圈,判斷flag的值,如果內迴圈中有被整除的,flag變為0,若沒有,flag值為1,輸出i
declare
-- local variables here
i integer;
j integer;
flag integer;
begin
-- test statements here
i:=2;
j:=2;
for i in 2..100 loop
flag:=1;
for j in 2..i-1 loop
if mod(i,j)=0 then
flag:=0;
exit;
end if;
end loop;
if flag=1 then
dbms_output.put_line(i);
end if;
end loop;
end;
建一張表,t_money(id,name,money),money是收入,1萬以內,分段顯示:0-1500屬於貧困,1501-3000是藍領,3001-8000是白領,8001-10000是精英
select case when end 來實現
create table t_money(id number(2),name varchar(8),money number(6));create sequence s1 minvalue 0 start with 0;
insert into t_money values(s1.nextval,&n,&m);
select name,case
when money between 0 and 1500 then '貧困'
when money between 1501 and 3000 then '藍領'
when money between 3001 and 8000 then '白領'
when money between 8001 and 10000 then '精英'
endfrom t_money;
寫乙個程式,找出上述t_money表中有多少條記錄,並顯示工資最高的人的資訊,排序再過濾,結果儲存到變數
declare-- local variables here
i integer;
-- 行變數的定義
v_userrow t_money%rowtype;
begin
-- test statements here
select count(*) into i from t_money;
select id,name,money into v_userrow.id,v_userrow.name,v_userrow.money from
(select * from t_money order by money desc) where rownum=1;
dbms_output.put_line(i);
dbms_output.put_line('工資最高人的資訊:'||v_userrow.id||v_userrow.name||v_userrow.money);
end;
執行順序
例題當子查詢返回的結果集很少時,採用in比較好;
當子查詢返回的結果集很多時,採用exists比較好
區域:在test window進行程式設計
組成:變數定義
變數的賦值(用:=進行賦值)
-- 在定義變數時進行賦值,或者在使用前進行賦值-- select只能查詢到一條記錄v_clazz number:=11;
v_college number(10) default 1;
-- 在查詢時進行賦值:將查詢到的最高工資賦值給i
select max(sal) into i from emp;
-- 行變數的賦值
select emp.empno,emp.ename into v_emprow.empno,v_emprow.ename from emp where rownum=1;
輸出異常處理:exception
-- sqlcode:異常編號,sqlerrom:異常資訊
-- 捕獲異常exception
when no_data_found then
dbms_output.put_line('沒有資料');
when too_many_rows then
dbms_output.put_line('返回太多行');
when others then -- 對未知異常的處理
dbms_output.put_line(sqlcode||'-'||sqlerrm);
選擇語句(在程式設計視窗執行):if elsif
-- 成績大於小於60為沒有通過,大於60通過declare
-- local variables here
i integer;
begin
-- test statements here
i:=60;
if i<60 then
dbms_output.put_line('no pass');
else
dbms_output.put_line('pass');
end if;
end;
選擇語句(在sql視窗執行): case when
select score,casewhen score between 0 and 59 then '不及格'
when score between 60 and 80 then '普通'
when score between 80 and 90 then '良好'
when score between 90 and 100 then '優秀'
end
from t_score;
for迴圈
declare-- local variables here
v_score integer;-- 成績
i integer;
begin
-- test statements here
delete from t_score;-- 測試前先刪除表資料
for i in 1..10 loop -- 2. for迴圈
v_score:=abs(mod(dbms_random.random,100)); -- 1. 隨機數
insert into t_score(name,score) values('name'||seq1.nextval,v_score);
end loop;
commit;
dbms_output.put_line(i);
end;
while迴圈
-- 變數定義時為初始化為null,無法進行比較declare
-- local variables here
i integer;
begin
if i is null then
dbms_output.put_line('i is not init');
i:=1;
else
if i<10 then
dbms_output.put_line('i<10');
else
dbms_output.put_line('i>=10');
-- test statements here
while i<10 loop
i:=i+1;
dbms_output.put_line(i);
end loop;
end;
loop end loop
declare-- local variables here
i integer;
begin
-- test statements here
/*for ... loop
end loop
while loop
end loop
*/loop
if i is null then
i:=0;
elsif i<10 then
i:=i+1;
else
exit; -- 退出迴圈
end if;
dbms_output.put_line(i);
end loop;
end;
-- 示例2
declare
-- local variables here
i integer;
begin
-- test statements here
i:=0;
loop
i:=i+1;
exit when i>10;
dbms_output.put_line(i);
end loop;
end;
第九課 變數
任務與 修改 沒有定義變數r,在第四行float r1,r2之後加上r就可以 include include intmain 閱讀程式 閱讀下面的程式,在閱讀過程中,請為每乙個變數畫出乙個方框,代表對應的記憶體空間。隨著閱讀,標明變數的變化過程,達到讀懂程式的目的。include intmain 圖...
C語言第九課
主要內容 高階指標 結構體指標 一 結構體指標 指向結構體變數的指標叫做結構體指標 typedef struct student student student stu student p stu student 結構體型別的指標 型別 p 結構體指標變數 變數名 結構體訪問成員變數 示例 type...
第九課 VBO索引
到目前為止,我們在建立vbo時總是重複儲存三角形公共邊的頂點。本課將介紹索引。索引是通過索引緩衝 index buffer 來實現的頂點復用。索引緩衝儲存的是整數 每個三角形有三個整數索引,分別指向各種屬性緩衝 attribute buffer 頂點位置 顏色 uv座標 其他uv座標 法線緩衝法線等...