重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
create or replace
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的徐汇网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
FUNCTION "函数名"
(
A in number,
B in number,
name in VARCHAR2
)
BEGIN
insert into 表名 values(A+B,name);
END 函数名;
//花括号里边就是需要传的参数,name如果是固定的可以直接写死,就不用传参了
create or replace function f(d number)
return varchar
is
begin
return substr(d,instr(d,'.')+1);
end f;
select f(12.34) from dual;
25、包
(1)定义包头
语法:
CREATE [OR REPLACE] PACKAGE [schame_name.]包名
IS | AS
包描述
包描述:可以是变量、常量及数据类型定义和游标定义,也可以是存储过程、函数定义和参数列表返回值类型。
例:
CREATE OR REPLACE PACKAGE employeePackage
AS
--类型定义
Type empRecType is record(
Empno number(4),
Salary number
)
--变量定义
p1 varchar2(20);
type t_departmentNo table is table of dept.deptno%type
index by binary_integer;
--游标定义
Cursor order_sal retrurn EmpRecType;
--聘用员工过程
Procedure HireEmployee(p_EmpNo emp.empno%type);
End employeePackage;
例:
CREATE OR REPLACE PACKAGE scott.pkg_displayproduct
IS
procedure prc_getproductinfo
(
pid scott.product.prodid%type,
pname out scott.product.prodname%type,
ctname out scott.product.CATEGORYID%type,
dscp out scott.product.description%type
);
function fun_getstock
(
pid scott.product.prodid%type
)
return number;
END pkg_displayproduct;
(2)定义包体
语法:
CREATE OR REPLACE PACKAGE BODY [schame_name.]包名
IS | AS
包体描述;
END 包名;
包名:将要创建的包名称,该名称可以和包头所在的包名相同,也可以不同。
包体描述:游标、存储过程或者函数的定义
包体是可选的,如果在包头中没有声明任何存储过程或者函数,则包体就不存在,即使在包头有变量、游标或者类型的声明
(3)引用包中对象
BEGIN
[schame_name.][包名.]对象名;
END;
create or replace function test(p1 in number, p2 in varchar2)
return varchar2 is
v_out varchar2(200);
begin
select flag_name
into v_out
from PU_META_PLAT.MD_META_DIM_CODE
where dim_table_id = p1
and flag_code in
(SELECT trim(substr(',' || p2 || ',',
instr(',' || p2 || ',', ',', 1, LEVEL) + 1,
instr(',' || p2 || ',', ',', 1, LEVEL + 1) -
instr(',' || p2 || ',', ',', 1, LEVEL) - 1))
FROM dual
CONNECT BY LEVEL =
(length(',' || p2 || ',') -
length(replace(',' || p2 || ',', ',', ''))) / 1 - 1));
return v_out;
exception
when others then
return null;
end;
create or replace package Package_Name is
PROCEDURE Main( errbuf OUT VARCHAR2
,retcode OUT NUMBER
,parameter1 IN varchar2
);
FUNCTION function_name (parameter1 IN NUMBER)
RETURN NUMBER;
end Package_Name;
---------
create or replace package body Package_name is
PROCEDURE MAIN(errbuf OUT VARCHAR2
,retcode OUT NUMBER
,parameter1 IN VARCHAR2
)
IS
BEGIN
............
END MAIN;
FUNCTION function_name (parameter IN NUMBER)
RETURN NUMBER
IS
x_cnt NUMBER:=0;
BEGIN
SELECT count(*)
INTO x_cnt
FROM dual
return(x_cnt);
END function_name;
end Package_name;
;
你最好使用PL/SQL Develop 创建包
下面是一个函数的简单示例!建议阅读相关书籍以便充分理解!毕竟很多细节是很难一一描绘的.系统看看书会比较好!
函数是有名称的pl/sql块
函数有返回值
在表达式中调用函数
存储在服务器端
CREATE OR REPLACE FUNCTION get_sal
(v_id IN emp.empno%TYPE) RETURN NUMBER
IS
v_salary emp.sal%TYPE :=0;
BEGIN
SELECT sal INTO v_salary FROM emp WHERE empno = v_id;
RETURN (v_salary);
END get_sal;
/
验证对象
select object_name,object_type from user_objects;
查看原程序
select text from user_source;
调用函数
select get_sal(7839) from dual;
删除函数
DROP FUNCTION get_salary;