create or replace function calculate_score( cat in varchar2, score in number, weight in number) return number asbeginreturn null;end calculate_score;
例子1
in参数 和返回值的函数
create or replace function findEmpIncome(pempno in number) return numberas income number(10);begin select sal*12+NVL(comm,0) into income from emp where empno = pempno; return income;end;/
例子2
in、out 参数和返回值的函数
create or replace function findEmpNameAndSal (pempno in number, psal out number)return varchar2aspename emp.ename%type;beginselect ename , sal into pename,psal from emp where empno = pempno;return pename;end;/执行declarepsal emp.sal%type;pename emp.ename%type;begin pename := findEmpNameAndSal(7788,psal); dbms_output.put_line(pename||'的工资是'||psal);end;/
过程
参数默认in
create or replace procedure add_evaluation( evaluation_id in number, employee_id in number, evaluation_date in date, job_id in varchar2, manager_id in number, department_id in number) as # as 变量 类型 (值范围);beginnull;exception when others then rollback;end add_evaluation;exec add_evaluationdrop procedure add_evaluation;
例子1
in 参数的使用
create or replace procedure raiseSalary(pempno in emp.empno%type)asbegin update emp set sal = sal * 1.1 where empno = pempno;end;/exec raiseSalary(7369);
例子2
out参数的使用,select into
create or replace procedure findEmpNameAndSalAndJob (pempno in emp.empno%type,pename out emp.ename%type,pjob out emp.job%type,psal out emp.sal%type)asbegin select ename,job,sal into pename,pjob,psal from emp where empno = pempno;end;/declare pename emp.ename%type; pjob emp.job%type; psal emp.sal%type;begin findEmpNameAndSalAndJob(7788,pename,pjob,psal); dbms_output.put_line('7788号员工的姓名是'||pename||',职位是'||pjob||',薪水是'||psal);end;/
包
声明
create or replace PACKAGE emp_eval ASPROCEDURE eval_department(department_id IN NUMBER);FUNCTION calculate_score(evaluation_id IN NUMBER , performance_id IN NUMBER) RETURN NUMBER;END emp_eval;
定义
CREATE OR REPLACE PACKAGE BODY emp_eval ASPROCEDURE eval_department(department_id IN NUMBER) ASBEGIN /* TODO implementation required */ NULL;END eval_department;FUNCTION calculate_score(evaluation_id IN NUMBER , performance_id IN NUMBER) RETURN NUMBER ASBEGIN /* TODO implementation required */ RETURN NULL;END calculate_score;END emp_eval;