--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...