oracle 儲存過程 bai

2022-06-19 01:00:18 字數 3258 閱讀 8870

--1 無入參最簡單的儲存過程

create or replace procedure hello_proc

as v_name varchar2(20);

v_age number;

begin

v_name:='bai';

v_age:=18;

dbms_output.put_line('你好'||v_name||',你今年'||v_age);

end;

--在plsql中呼叫

begin

hello_proc;

end;

/* 在command窗下執行

set serverout on;

exec system.hello_proc;

*/--練習1

create or replace procedure show_sum_proc

as v_i number:='1';

v_sum number:='0';

begin

loop

v_sum:=v_sum+v_i;

v_i:=v_i+1;

exit when v_i=201;

end loop;

dbms_output.put_line(v_sum);

end;

--2 有入參的儲存過程

create or replace procedure show_add_result

( i number default 10, --預設值

j number default 20)as

v_result number;

begin

v_result :=i+j;

dbms_output.put_line(i||'+'||j||'='||v_result);

end;

begin

show_add_result('2');

end;

select * from scott.emp;

--經典例子

顯示指定工號的員工姓名和工資,如果沒有,則輸出該員工不存在

create or replace procedure show_emp_by_eno_proc

( v_eno scott.emp.empno%type:='7369')as

v_ename varchar(20);

v_sal number;

begin

select ename,sal into v_ename,v_sal from scott.emp where empno=v_eno;

dbms_output.put_line(v_eno||'對應的員工名'||v_ename||',工資'||v_sal);

exception

when no_data_found then

dbms_output.put_line('找不到'||v_eno||'對應的員工');

end;

create or replace procedure show_emp_by_eno_proc

asbegin

dbms_output.put_line('測試過載');

end;

begin

show_emp_by_eno_proc();

end;

--根據姓名查詢員工

create or replace procedure show_emp_by_ename_proc

( v_ename varchar2)as

v_sal number;

begin

select sal into v_sal from scott.emp where ename=v_ename;

dbms_output.put_line(v_ename||'對應的員工工資'||v_sal);

exception

when no_data_found then

dbms_output.put_line('找不到'||v_ename||'對應的員工');

when too_many_rows then

dbms_output.put_line(v_ename||'對應的員工超過1個');

when others then

dbms_output.put_line('查詢過程出現異常!');

end;

---create or replace procedure show_dname_by_eno_depno

( v_depno scott.dept.deptno%type)as

v_dname varchar(20);

begin

select dname into v_dname from scott.dept where deptno = v_depno;

dbms_output.put_line(v_depno||'對應的部門名'||v_dname);

exception

when no_data_found then

dbms_output.put_line('找不到'||v_depno||'對應的部門');

end;

--3 有入參,有出參的儲存過程

輸入i,j,用result出參獲得相加的結果

create or replace procedure get_add_result_proc(

i number,

j number,

result out number --指定result為出參)as

begin

result:=i+j;

end;

--使用plsql呼叫儲存過程

declare

result number;

begin

get_add_result_proc('1','2',result);

dbms_output.put_line(result);

end;

--建立儲存過程,獲得當前的日期和星期幾

create or replace procedure get_date_and_day

( v_date out varchar2 ,

v_day out varchar2 )as

begin

select to_char(sysdate,'dd'),to_char(sysdate,'day') into v_date,v_day from dual;

end;

Oracle儲存過程呼叫儲存過程

oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...

ORACLE儲存過程

自定義函式開始 create or replace function fn wftemplateidget templatecategoryid number,organid number,templatemode number return number istemplateid number i...

Oracle 儲存過程

create or replace procedure p 有就替換,沒有就建立 iscursor c is select from emp for update begin for v emp in c loop if v emp.deptno 10 then update emp2 set sa...