oracle學習筆記之儲存過程

2021-06-19 10:12:38 字數 3707 閱讀 8634

user:scott

sql> create table mytest(name varchar2(30),password varchar2(30));

table created

sql> create or replace procedure pro_sp1 is --建立乙個簡單的儲存過程

2  begin

3    insert into mytest('李慧','1314');

4  end;

5  /

warning: procedure created with compilation errors

sql> show error;--顯示建立語句的錯誤

errors for procedure scott.pro_sp1:

line/col error

-------- -------------------------------------

3/22     pl/sql: ora-00928: 缺失 select 關鍵字

3/3      pl/sql: sql statement ignored

sql> 

sql> create or replace procedure pro_sp1 is

2  begin

3    insert into mytest(name,password) values('李慧','1314');

4  end;

5  /

procedure created

sql> exec pro_sp1;

pl/sql procedure successfully completed

sql> commit;

commit complete

sql> set serveroutput on;--開啟控制台輸出

--建立乙個帶兩個引數的儲存過程

create or replace procedure sp_pro1(names varchar2,newsal number) is

begin

update emp set sal=newsal where ename=names;

end;

--呼叫剛剛建立儲存過程

exec sp_pro1('scott',3500);

--建立乙個儲存過程,輸入雇員名稱,如果雇員工資低於2000就給他加20%

create or replace procedure sp_pro2(names varchar2) is

nums emp.sal%type;ids emp.empno%type;

begin

select empno,sal into ids,nums from emp where ename=names;

if nums<2000 then

update emp set sal=nums*1.2 where empno=ids;

dbms_output.put_line(names||'工資低於2000,給他加了20%');

else 

dbms_output.put_line(names||'工資不低於2000,不給加工資了');

end if;

end;

--建立乙個儲存過程,輸入雇員編號,返回該雇員的名稱

--in 代表輸入引數,out代表輸出引數

create or replace procedure sp_pro3

(eno in number,names out varchar2) is

begin

select ename into names from emp where empno=eno;

end;

--建立乙個包,包裡面定義了乙個游標型別的資料

create or replace package testpackage as

type t_cursor is ref cursor;

end;

--建立乙個儲存過程,通過輸入的部門號返回該部門的所以職工資訊

--open emplist for代表開啟游標並把查詢的結果集放在emplist裡面

create or replace procedure sp_pro4

(dno in number,emplist out testpackage.t_cursor) is

begin

open emplist for select * from emp where deptno=dno;

end;

--建立乙個儲存過程,通過輸入部門編號獲取該部門所有的記錄條數

create or replace procedure sp_pro5

(dno in number,nums out number) is

begin

select count(*) into nums from emp where deptno=dno;

end;

--建立包

create or replace package sp_package2 as

type sp_cursor is ref cursor;

end;

--通用分頁儲存過程

create or replace procedure 

sp_pro6(tablename in varchar2,--表或檢視名稱,輸入引數

selectrow in varchar2,--要查詢的列,輸入引數

wheres in varchar2,--查詢條件,輸入時要輸入where ....,輸入引數

orders in varchar2,--排序條件,不包含order by ,輸入引數

currentpage in number,--當前頁,輸入引數

pagesizes in number,--每頁顯示的條數,輸入引數

pagecount out number,--總頁數,輸出引數

counts out number,--總條數,輸出引數

emplist out sp_package2.sp_cursor--輸出的結果集

) is

v_sql varchar2(32767);

begin

v_sql:='select * from (select a1.*,rownum rn from (select '||selectrow||' from '||tablename||wheres||' order by '||orders||') a1 where rownum<='||currentpage*pagesizes||') where rn>='||((currentpage-1)*pagesizes+1);

open emplist for v_sql;

v_sql:='select count(1) from '||tablename||wheres;

execute immediate v_sql into counts;--執行sql語句,並把值賦給counts

if mod(counts,pagesizes)=0 then

pagecount:=counts/pagesizes;

else

pagecount:=counts/pagesizes+1;

end if;

exception

when no_data_found then

pagecount:=0;

counts:=0;

end;

Oracle學習筆記之儲存過程(1)

建立乙個儲存過程 首先建立乙個資料庫 create table mytest name varchar2 30 passwd varchar2 30 要是實現的功能為使用儲存過程往mytest表裡插入一條資料 create procedure sp prol is create or replace...

oracle學習筆記 儲存過程

一 概述 oracle儲存過程開發的要點是 使用notepad文字編輯器,用oraclepl sql程式語言寫乙個儲存過程 在oracle資料庫中建立乙個儲存過程 在oracle資料庫中使用sql plus工具執行儲存過程 在oracle資料庫中修改儲存過程 通過編譯錯誤除錯儲存過程 刪除儲存過程 ...

oracle儲存過程學習筆記

建乙個不帶任何引數儲存過程 輸出系統日期 create or replace procedure output date is begin dbms output.put line sysdate end output date 執行這個儲存過程 begin output date end 建一張表...