show error;
1. create table mytest(name varchar2(30),passwd varchar2(30));
2. create or replace procedure my_pro1 is
3. begin
4. insert into mytest values('why','m1234');
5. end;
6. \
1)exec 過程名(引數值1,引數值2...);
2)call 過程名(引數值1,引數值2...);
每寫一次呼叫程序語句,就會在mytest表中新增一項why
exec my_pro1;
塊=過程(儲存過程)+函式+觸發器+包
定義部分,執行部分,例外處理部分:
declare
/*定義部分——定義常量、變數、游標、例外、複雜資料型別*/
begin
/*執行部分——要執行的pl/sql語句和sql語句*/
exception
/*例外處理部分——處理執行的各種錯誤*/
end;
定義部分是從declare開始的,該部分是可選的;
執行部分是從begin開始的,該部分是必須的;
例外處理部分是從exception開始的,該部分是可選的。
dbms_output.put_line('使用者名稱是'||v_name||'工資是'||v_sal);
create procedure my_pro2(my_name varchar2,newsal number) is
塊中定義變數在declare與begin之間,過程定義變數在is和begin之間
if....then;if....then....else;if....then....elsif....else....
簡單的條件判斷 if – then
問題:編寫乙個過程,可以輸入乙個雇員名,如果該雇員的工資低於2000,就給該員工工資增加10%。
1. create or replace procedure sp_pro6(spname varchar2) is
2. --定義
3. v_sal emp.sal%type;
4. begin
5. --執行
6. select sal into v_sal from emp where ename=spname;
7. --判斷
8. if v_sal<2000 then
9. update emp set sal=sal+sal*10% where ename=spname;
10. end if;
11. end;
12. /
二重條件分支 if – then – else
編寫乙個過程,可以輸入乙個雇員名,如果該雇員的補助不是0就在原來的基礎上增加100;如果補助為0就把補助設為200;
1. create or replace procedure sp_pro6(spname varchar2) is
2. --定義
3. v_comm emp.comm%type;
4. begin
5. --執行
6. select comm into v_comm from emp where ename=spname;
7. --判斷
8. if v_comm<>0 then
//pl/sql中不等於是'<>'
9. update emp set comm=comm+100 where ename=spname;
10. else
11. update emp set comm=comm+200 where ename=spname;
12. end if;
13. end;
14. /
exec sp_pre6('scott');
//名字必須大寫
多重條件分支 if – then – elsif – then
問題:編寫乙個過程,可以輸入乙個雇員編號,如果該雇員的職位是president就給他的工資增加1000,如果該雇員的職位是manager就給他的工資增加500,其它職位的雇員工資增加200。
sql**
1. create or replace procedure sp_pro6(spno number) is
2. --定義
3. v_job emp.job%type;
4. begin
5. --執行
6. select job into v_job from emp where empno=spno;
7. if v_job='president' then
8. update emp set sal=sal+1000 where empno=spno;
9. elsif v_job='manager' then
10. update emp set sal=sal+500 where empno=spno;
11. else
12. update emp set sal=sal+200 where empno=spno;
13. end if;
14. end;
15. /
exec sp_pre6(7839);
案例:現有一張表users,表結構如下:
使用者id | 使用者名稱
| 請編寫乙個過程,可以輸入使用者名稱,並迴圈新增10個使用者到users表中,使用者編號從1開始增加。
sql**
1. create or replace procedure sp_pro6(spname varchar2) is
2. --定義 :=表示賦值
3. v_num number:=1;
4. begin
5. loop
6. insert into users values(v_num,spname);
7. --判斷是否要退出迴圈
8. exit when v_num=10;
9. --自增
10. v_num:=v_num+1;
11. end loop;
12. end;
13. /
基本迴圈至少要執行迴圈體一次,而對於while迴圈來說,只有條件為true時,才會執行迴圈體語句,while迴圈以while...loop開始,以end loop結束。while先判斷,再決定循不迴圈,loop直接先迴圈 PLSQL基礎筆記
來杭州學習半年多了 今天終於講到以前關注的oracle pl sql儲存過程 整理一下上課敲的 先了解要用到的知識 1.variable 變數 語法 var name var type constant not null value declare v fname varchar2 50 為了保障變...
PL SQL學習筆記
from ebs pl sql儲存過程報表輸出 1.fnd file.put line fnd file.log,l err idx 從mes表獲取tool id tool.tool id 出現異常錯誤!2.fnd file.put line fnd file.output,文字輸出內容.獲取物件結...
PL SQL學習筆記
1 啟動sqlplus crtl r sqlplus 啟動sqlplus 輸入使用者名稱密碼登陸oracle 輸出hello world!ps sql set serveroutput on 這句不寫的話不會有結果輸出 sql begin 2 dbms output.put line hello w...