5 回答

16.自定义函数
自定义函数语法:
CREATE OR REPLACE FUNCTION 函数名
RETURN 返回值类型
IS
声明部分;
BEGIN
函数体;
RETURN 变量;
END;
函数与存储过程的区别:
(1)语法上除了创建对象的关键字不同之外,函数还多了一个RETURN关键字,它确定了该函数返回值的数据类型.
(2)存储过程可以没有返回值,但函数必须有返回值,即使发生异常也要返回.
(3)函数与标准SQL结合性更好,带OUT型参数的存储过程必须用PL/SQL方式调用,而函数均可以通过标准SQL调用.
注: (1)函数返回值只提供返回值类型,不允许有长度.
(2)使用函数必须接收返回值.
样例:
create or replace function getSal(v_empno varchar)
return number
is
v_sal number(4);
begin
select sal into v_sal from emp where empno=v_empno;
return v_sal;
end;
调用: (1) select getsal(7499) from dual;
(2) declare
v_sal number(4);
begin
v_sal:=getsal(7499);
dbms_output.put_line(v_sal);
end;
17.函数的删除
语法: DROP FUNCTION 函数名;

CREATE OR REPLACE FUNCTION result_num_type_test(strValue IN VARCHAR2) RETURN RESULT_TBL IS str1 varchar2(200); str2 varchar2(200); i number := 0; j number := 0; tb_o RESULT_TBL; BEGIN i := length(strValue); IF i = 5 THEN SELECT a.new_code_no, a.new_name_all INTO str1, str2 FROM TEMP_NEW_CODE A WHERE A.NEW_CODE_NO = strValue; ELSIF i = 4 THEN SELECT t.new_code_no, t.new_name_all INTO str1, str2 FROM (SELECT a.new_code_no, a.new_name_all, ROWNUM rn FROM TEMP_NEW_CODE A WHERE A.New_Code_No like '%' || strValue || '%' ORDER BY A.NEW_CODE_NO) t WHERE t.rn = 2; ELSE SELECT a.new_code_no, a.new_name_all into str1, str2 FROM TEMP_NEW_CODE A WHERE A.NEW_CODE_NO = strValue; END IF; tb_o.EXTEND; tb_o(tb_o.COUNT) := split_arr(cod >= str1, nam >= str2); RETURN tb_o; END result_num_type_test; |
添加回答
举报