--無參的儲存過程
create or replace procedure proc_one
as v_emp emp%rowtype;
begin
select * into v_emp from emp where empno=7788;
dbms_output.put_line(v_emp.ename||' '||v_emp.sal);
end;
--在pl/sql developer command視窗檢視過程編譯錯誤
/show errors;
/--呼叫過程授權
grant execute on proc_one to px; --授予執行權給px使用者
grant execute on proc_one to public;--授予所有使用者
--呼叫儲存過程
sql> set serveroutput on; --設定輸出
sql> exec scott.proc_one;
sql> exec scott.proc_one();
--pl/sql**塊方式呼叫
begin
proc_one();
end;
--oracle儲存過程引數形式有:
--in 預設形式 可以省略in 可以指定預設值
--out 輸出引數
--in out 輸入輸出引數
--帶輸入引數的儲存過程
create or replace procedure proc_two
(v_no in number:=7788) --引數不需要指定長度並可以指定預設值 可以省略in
as v_emp emp%rowtype;
begin
select * into v_emp from emp where empno=v_no;
dbms_output.put_line(v_emp.ename||' '||v_emp.sal);
exception
when no_data_found then
dbms_output.put_line('沒有找到資料');
end;
--帶輸出引數的儲存過程
create or replace procedure proc_three
(v_no in dept.deptno%type:=10,
out_deptname out dept.dname%type)
isbegin
select dname into out_deptname from dept where deptno=v_no;
end;
--呼叫
declare
v_dname dept.dname%type;
v_dno dept.deptno%type;
begin
v_dno:='&部門編號';
--proc_three(v_dno,v_dname);
proc_three(out_deptname=>v_dname,v_no=>v_dno);
--通過指定名稱傳遞實參,這樣可以不按位置順序
dbms_output.put_line('編號為'||v_dno||'的部門名稱:'||v_dname);
end;
--帶輸入輸出引數的儲存過程
create or replace procedure proc_four
(v_a in out number,v_b in out number)
as v_temp number;
begin
v_temp:=v_a;
v_a:=v_b;
v_b:=v_temp;
end;
--呼叫
declare
n number:=100;
m number:=200;
begin
dbms_output.put_line('交換前--n:'||n||' m:'||m);
proc_four(n,m);
dbms_output.put_line('交換後--n:'||n||' m:'||m);
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...